php怎么引用数据,PHP里引入Java中数据注入变量的概念具体如何实现?

博客探讨了如何在PHP中避免使用复杂的依赖注入机制,通过魔术方法`__get`实现动态对象创建和属性注入。作者提出了一种反向思维的方法,即不预先声明需要注入的变量,而是仅在需要时通过变量名自动初始化并设置对象,从而提高效率。这种方法适用于不常驻内存的语言如PHP,避免了Java中常见的反射机制导致的性能问题。
摘要由CSDN通过智能技术生成

其实吧,没有大家想象的这么复杂,Zend Framework以把简单的事情搞复杂而著称,其实类中的变量注入过程可以总结为如下过程class A

{

private $myObject;

public function setMyObject($myObject)

{

$this->myObject = $myObject;

}

}

$a = new A();

$a->setMyObject(new Object());

一句话说就是将一个外部对象引入作为类的内部属性,只不过我在框架设计时不想绕这么多弯,在java中是通过反射机制探测要注入的对象,所以你得写一堆set方法,因为java是常驻内存的,所以第一次注入时慢一点无所谓,但是如果php也这么搞效率就太低了。所以我反其道而行之,不需要让一个class来声明外部要注入什么变量,只需要知道我要用哪些变量就行了,其具体技巧在于__get这个magic method里class Base

{

public __get($varName)

{

$className = ucfirst($varName);

$this->{$varName} = new $className;

return $this->{$varName};

}

}

这样,当我在继承自Base的class里随便调用一个不存在的变量,比如$this->userModel,它就会通过调用__get方法,自动初始化new UserModel(),并且将这个变量set到当前类的属性中,第二次调用就不必初始化了。

这只是个具体思路,具体的匹配和初始化规则会更复杂,而且你可能还需要实现单例模式,避免在不同的类中重复初始化相同的对象,不过这些都很简单了,最重要的就是这一步思路,说破了其实也很简单,相信很多朋友早已用过了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值