【问题标题】:PHP object scopePHP 对象范围
【发布时间】:2013-04-11 01:57:45
【问题描述】:

有人可以向我解释 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 oop scope


【解决方案1】:

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

【讨论】:

  • 我正在搜索 object scope 可能是我没有看到手册页的原因。谢谢。
  • 编码没问题干杯:)
【解决方案2】:

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

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

在这种情况下,当您将值分配给 $myBook 时,它首先会为全局范围初始化变量 $myBook。因此,当您在 if 块之外访问 $myBook 时,它已经存在于文档的全局范围内,因此您可以访问它而不会产生错误。

上述场景有一些限制,比如变量的初始化位置,例如(函数内,类内)。

【讨论】:

  • 感谢您的详细回答。
猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 2014-02-12
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多