我一直理解是创建对象后 构造方法才自动调用的 测试出错了
class o{ public function __construct(){ var_dump($object); }}$object = new o;
构造方法要传入变量
class o{
public function __construct($object){
var_dump($object);
}
}
$str = "";
$object = new o($str);
class o{
public function __construct(){
var_dump($object);
}
}
类里面没有$object变量,所以输出Notice: Undefined variable: object
如果你想初始化时获取$object,可以传入来,例如:
<?phpclass o{ public function __construct($object){ var_dump($object); }}$oo = new stdClass();$oo->name = 'fdipzone';$object = new o($oo);?>
报错是因为变量不存在,你的代码不符合变量作用域的约定
加上 global $object; 就可以了
你可看到输出的是 NULL
这是 new o 之后才会把对象赋值给 $object;,而构造函数是在对象创建时执行的
class o{ public function __construct(){ global $object; //加上这个 var_dump($object); //输出 NULL }} $object = new o;var_dump($object); //输出 object(o)#1 (0) { }
自古答案出自楼上
@xuzuning new o 之后有了对象 就自动调用了构造方法完 了 再把对象的引用 赋给 $object 是这样吗?版主大牛
new o 是一个动作,从类 o 创建一个对象
php 在创建对象时,调用了构造函数(这样你就有机会做一些你自己的事情)
注意:
$object = new o;
$object 得到的不是 new o 的引用,而是 new o 本身
只一点,无论是 php4 还是 php5 都是一样的
@xuzuning 哦,我知道构造方法 ,但是就是不知道什么时候 调用的,:new o 之后有了对象 就自动调用了构造方法完 了 再把对象的引用 赋给 $object 是这样吗?
@xuzuning 是这样吗? 在php上的 资源和对象的赋值方式是引用哦?
new 并不是赋值
它是将对象和变量捆绑在一起
@xuzuning 原来如此 那么引用一说 的怎么的呢?麻烦说说
class T { public $v = 1; function see() { echo $this->v, PHP_EOL; }}$a = new T;$b = new T;$a->v = 2;$a->see(); //2$b->see(); //1 如果 new 传递的是引用,那么为什么是1 而不是 2 呢?$c = $b; //对象赋值传递的是引用$c->v = 100;$b->see(); //100$c->see(); //100 所以 $b->v 变了,$c->v 也跟着变了
@xuzuning 明白了
看来你对类中的构造方法等情况理解的并不透彻,,构造方法的作用是什么,,构造方法是初始化对象,如果在新建对象的时候,不赋值,构造方法就没有意义了