静态方法调用非静态方法
Q:static修饰的静态方法无法使用 t h i s , 所 以 this,所以 this,所以this->method()方式在静态方法中不可用
class Index
{
public function hello($name = 'ThinkPHP5')
{
return 'hello,' . $name;
}
public static function test()
{
dump($this->hello('测试'));
}
}
//此种方式会报错不可用
A:通过php反射机制将自身类反射并实例化,则解决该问题。
public static function test()
{
// 反射类
$class = new \ReflectionClass('app\index\controller\Index');
// 实例化
$after = $class->newInstance();
dump($after->hello('test'));
}
// 此种结果可以成功访问并输出 'hello, test'
调用其他类中的私有方法
A:同样通过反射机制
class to {
private function isPrivate()
{
echo '私有方法';
}
}
class Use {
public function isUse()
{
// 反射类
$class = new \ReflectionClass('app\index\controller\test');
// 实例化类
$after = $class->newInstance();
// 获取需要调用的私有方法
$method = $class->getMethod('delete');
// 将方法设置为可用
$method->setAccessible('true');
// 调用并获取结果 如果方法需要参数 则可以用 invokeArgs() 方法
print_r($method->invoke($after));
}
}