php – 如何使变量私有的特征?
发布时间:2020-12-13 17:34:45 所属栏目:PHP教程 来源:网络整理
导读:我想在一个类中多次重用一个功能.此功能依赖于一个私有变量: trait Address { private $address; public function getAddress() { return $this-address; } public function setAddress($address) { $this-address = $address; }} 我发现到use the trait tw
我想在一个类中多次重用一个功能.此功能依赖于一个私有变量:
trait Address { private $address; public function getAddress() { return $this->address; } public function setAddress($address) { $this->address = $address; } } 我发现到use the trait twice的唯一方法是: class User { use Address { getAddress as getHomeAddress; setAddress as setHomeAddress; getAddress as getWorkAddress; setAddress as setWorkAddress; } } 问题是,通过这样做,私有变量$address在不同的方法之间共享,代码将无法正常工作: $user = new User(); $user->setHomeAddress('21 Jump Street'); echo $user->getWorkAddress(); // 21 Jump Street 有没有解决方案真正使用trait两次,而不共享其私有变量?
声明使用trait将不会创建该trait的实例.特征基本上只是复制并粘贴到使用类中的代码.这将仅为该方法创建一个别名,例如它会添加类似的东西
public function getHomeAddress() { return $this->getAddress(); } 到你的用户类.但这仍然只是一个特点.不会有两个不同的$address属性,只有一个. 您可以使这些方法是私有的,然后通过__call通过switch / shell委托方法名称上的任何公共调用,并使用地址的数组,例如. trait Address { private $address = array(); private function getAddress($type) { return $this->address[$type]; } private function setAddress($type,$address) { $this->address[$type] = $address; } public function __call($method,$args) { switch ($method) { case 'setHomeAddress': return $this->setAddress('home',$args[0]); // more cases … } } } 但这只是一个蠕虫病毒. 换句话说,你不能真正地做你想要做的特质.使用两种不同的特征.或使用好的旧聚合并添加具体的代理方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |