PHP[007]:ReflectionClass
coding
调用类私用方法
<?php
class Cat
{
private function want($see)
{
echo $see.$see.$see.PHP_EOL;
}
}
$reflector = new ReflectionClass(Cat::class);
$instance = $reflector->newInstance();
$method = $reflector->getmethod('want');
$method->setAccessible(true);
$result = $method->invoke($instance, 'eat food ');
实例化不可实例的类
使用这个的原因是因为拆分老的业务代码中,有个一个 Aentity 依赖另一个 Bentity (在orm层中调用get_class),如果查询或者Bentity提供的创建方法会导致将其注册到 UnitOfWork 中,会导致最后的入库(虽然也有可能不入库),所以采用 ReflectionClass::newInstanceWithoutConstructor 实例化一个在 get_class 范围内等价的 entity ,并将其作为一个临时的参数对象代替 Bentity 维持代码的运作
<?php
function println(String $str)
{
echo($str.PHP_EOL);
}
class Dog
{
protected $name;
private function __construct($name = 'WangCai')
{
$this->name = $name;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
$reflector = new ReflectionClass(Dog::class);
$dog = $reflector->newInstanceWithoutConstructor();
$dog->setName('DeFu');
$class = get_class($dog);
println($class);
println($dog->getName());
评论列表