• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

构造方法问题

php 搞代码 3年前 (2022-01-23) 9次浏览 已收录 0个评论
文章目录[隐藏]

我一直理解是创建对象后 构造方法才自动调用的 测试出错了

class o{ 	public function __construct(){		var_dump($object);	}}$object = new o;

错误信息:Notice: Undefined variable: object

回复讨论(解决方案)

构造方法要传入变量
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<i style="color:transparent">本文来源gaodai$ma#com搞$$代**码)网8</i><strong>搞代gaodaima码</strong>;$b->see(); //100$c->see(); //100 所以 $b->v 变了,$c->v 也跟着变了

@xuzuning 明白了

看来你对类中的构造方法等情况理解的并不透彻,,构造方法的作用是什么,,构造方法是初始化对象,如果在新建对象的时候,不赋值,构造方法就没有意义了


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:构造方法问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址