【问题标题】:instantiation class before defined定义前的实例化类
【发布时间】:2014-01-29 16:21:15
【问题描述】:

在 php.net 中写了以下内容: 类应该在实例化之前定义(在某些情况下这是一个要求)。 任何人都可以在需要时举个例子吗?因为它的典型使用不需要,就像在这个例子中工作正常:

<?php
$class = "a" ;
$ob = new $class() ;
class a
{
    var $city = "new york" ;
}
echo $ob->city ;
?>

【问题讨论】:

  • 您能否添加一个指向您看到此内容的链接,以便我们查看上下文?
  • 请添加链接。 AFAIK 类和函数定义可以在文件中的任何位置。解释器在实际运行文件之前获取所有定义。

标签: php class instantiation


【解决方案1】:

这行不通:

new Foo;

if (true) {
    class Foo { }
}

条件声明的类必须放在第一位。基本上,文件“顶层”的任何内容都由解析器在解析文件时直接处理,这是运行时环境执行代码之前的步骤(包括new Foo)。但是,如果类声明嵌套在像if 这样的语句中,则需要由运行时环境进行评估。即使保证该语句为真,解析器也无法评估if (true),因此该类的实际声明被推迟到运行时。而在运行时,如果你尝试在class Foo { } 之前运行new Foo,它将失败。

【讨论】:

  • 是的,我也想过这个场景,因为我在函数定义中看到了这种例子。我认为的另一种情况是,如果类定义是在函数内部定义的,那么为了实例化该类的对象,首先需要调用该函数。
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
相关资源
最近更新 更多