我有一个php文件,其中包含一个类和一个私有函数。
oldfile.php
class oldClass {
private function functionTest(){
// This is the function I need
}
}
我需要这个函数作为另一个类中的公共函数。
我能否以某种方式将文件加载到我的新类中(例如,使用“include”),并将其他类中的“private”函数视为新类中的“public”函数?
newfile.php
class newClass {
/*
import functionTest() from oldClass as public function in newClass ???
*/
from oldfile.php import oldClass public functionTest // ???
// or
from oldClass import functionTest as public // ???
}
这是不可能的,类的私有方法只能在该类中使用
更多示例见https://www.php.net/manual/en/language.oop5.abstract.php
您可以使用反射来更改其可见性,例如:
<?php
class oldClass
{
private function functionTest($foo)
{
echo 'Private functionTest() called with argument ', $foo, PHP_EOL;
}
}
class newClass
{
public function functionTest($foo)
{
$method = new ReflectionMethod(oldClass::class, 'functionTest');
$method->setAccessible(true);
return $method->invoke(new oldClass(), $foo);
}
}
$foo = new newClass();
$foo->functionTest('Blah');
您可以在类属性中缓存内容,这样就不需要每次都创建一个新的ReflectionMethod
实例,但我希望您了解这个想法。
不用说,这不是在面向对象编程的正常过程中要做的事情。 这是一个黑客来处理你不能重新设计的第三方代码。