您好,欢迎访问一九零五行业门户网

php中关于类的构造函数参数问题的解决

详细代码如下:
<?php final class registry { private $data = array(); public function get($key) { return $this->data[$key]; } public function set($key, $value) { $this->data[$key] = $value; } } abstract class controller { protected $registry; public function construct($registry) { $this->registry = $registry; } } class controllercommonhome extends controller { public function test() { $this->registry->set('load','load'); } } $registry = new registry(); $con = new controllercommonhome($registry); $con->test(); echo $registry->get('load'); ?>
在$con对象初始化时传入的参数$registry是以何种方式传入的?传值还是传地址?如果是传值,那么在$con对象执行函数test()时应该不会影响到原对象$registry,但事实是影响到了registry的值。
但是如果我把$registry改成一个简单变量,例如$registry = 123,同样是在$con对象中对$registry赋值,这个时候却没有影响到原来的变量,仍然是123。
求解
好吧, clone() 构造函数。对象是可以克隆的,为啥克隆,就是不希望改变它的早前的状态
对象不是一般变量,请看下面一段谷歌搜到的
对象传递 
php5使用了zend引擎ii,对象被储存于独立的结构object store中,而不像其它一般变量那样储存于zval中(在php4中对象和一般变量一样存储于zval)。在zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的object store。由于对象本身位于object store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。.这使php对象看起来就像总是通过引用(reference)来传递,因此php中对象默认为通过“引用”传递,你不再需要像在php4中那样使用&来声明。
这种问题我以前都没想过,看到你的问题才去找资料的
以上就是php中关于类的构造函数参数问题的解决 的详细内容。
其它类似信息

推荐信息