84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
『 PHP里引入Java中数据注入变量的概念具体如何实现?』http://segmentfault.com/q/10100000001...
对这一概念及其使用场景不了解,能否介绍一下?
光阴似箭催人老,日月如移越少年。
与其叫注入变量不如加引用变量更加贴切,正如我在那个问题中所回答的。而这种做法的应用场景则是一切需要用到单例模式引用场景的地方,比如以前你在Controller里调用Model,可能要这么写
class Controller_Test extends Controller { public function execute() { $this->loadModel('user')->fetch(...); } }
这被称为调用,无论你怎么做单例模式都是从外部调用的这个对象。但是如果你按我在上个答案中提到的方法实现__get,那么这个从外部调用的对象就注入成了内部属性,它的好处是显而易见的,从写法上说减少了很多麻烦而且更加清晰,从性能上说减少了多次调用时检测以及函数调用消耗
__get
class Controller_Test extends Controller { public function execute() { $this->userModel->fetch(...); } }
举个例子吧。 User:
id | name | age
这样,如果有变量注入,初始化一个对象。
$user = new UserObj(); // 此时 $user 这个实例中并没有载入 name 数据 echo $user->name; // 调用name属性的时候,才进行注入,载入数据
事实上,这个UserObj并没有定义name属性,而是注入进去的 在User里加入一个字段 birthday
id | name | age | birthday
那调用的时候,已然是直接调用,不需要修改UserObj的定义
$user = new UserObj(); echo $user->birthday;
与其叫注入变量不如加引用变量更加贴切,正如我在那个问题中所回答的。而这种做法的应用场景则是一切需要用到单例模式引用场景的地方,比如以前你在Controller里调用Model,可能要这么写
这被称为调用,无论你怎么做单例模式都是从外部调用的这个对象。但是如果你按我在上个答案中提到的方法实现
__get
,那么这个从外部调用的对象就注入成了内部属性,它的好处是显而易见的,从写法上说减少了很多麻烦而且更加清晰,从性能上说减少了多次调用时检测以及函数调用消耗举个例子吧。
User:
这样,如果有变量注入,初始化一个对象。
事实上,这个UserObj并没有定义name属性,而是注入进去的
在User里加入一个字段 birthday
那调用的时候,已然是直接调用,不需要修改UserObj的定义