PHP对象作用域


PHP object scope

谁能给我解释一下PHP中对象作用域的概念?我对PHP中的对象非常陌生,我问这个问题的原因是因为我能够在if语句中创建对象,然后在if语句的作用域之外访问对象。

的例子:

  //only create object if some condition is met
   if ($conditionTrue){
      $myBook = new Book('PHP for Dummies','softcopy'); 
    }
   $myBook.read();

我本以为这会产生一个错误,但它没有。

关于我的问题的一些背景

我试图弄清楚如何根据满足的条件确定调用哪个构造函数。唯一可以想到的方法是引入if statement,但这样做,我认为会强加scope的问题,它没有,我只是想知道为什么…

在PHP中,if没有自己的作用域。所以,是的,如果你在if语句或块内定义了一些东西,那么它就会像你在外部定义它一样可用(当然,假设代码在块内或if语句内运行)。有关PHP作用域的更多信息,请阅读变量作用域手册页。

这种情况会在其他语言如 JAVA,C# 中产生错误。但在PHP中,这种情况不会发生。

因为在PHP中我们可以在任何地方创建变量,所以不需要先初始化变量,然后再赋值。

在这个场景中,当您将值赋给$myBook时,它首先为全局作用域初始化变量$myBook。因此,当您访问if块之外的$myBook时,它已经存在于文档的全局作用域中,因此您可以访问它而不会产生错误。

上面的场景有一些限制,比如变量在哪里初始化,例如(在函数中,在类中)。