【问题标题】:when it is required that a class will be defined before instantiation?什么时候需要在实例化之前定义一个类?
【发布时间】:2013-10-29 12:17:47
【问题描述】:

在 PHP 文档中它说:

类应该在实例化之前定义(在某些情况下这是一个要求)。

谁能给我一个除非之前定义过才能实例化的类的例子吗?

【问题讨论】:

  • 我不知道可以实例化一个未定义的类——除了stdClass,但这是在 PHP 核心中定义的。但也许这里的意思是未定义类的反序列化,这会给你一个警告和一个不完整的类 (PHP_Incomplete_Class)

标签: php oop


【解决方案1】:
if (true) {
    new Foo;
    class Foo { }
}

解析规则与函数相同:如果它们是在文件的“顶层”中定义的,那么它们会在文件解析期间被解析。如果它们是在一段需要运行时评估的代码中定义的,那么类或函数只会在代码执行时定义,在这种情况下,在“执行”之前你不能使用它。

【讨论】:

    【解决方案2】:
    <?php
    // Top Level
    
    trait T {
    }
    
    $c = new C();
    
    class C {
        use T;
    }
    

    使用 trait,此代码会出现错误 (Class 'C' not found in...)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2011-04-17
      相关资源
      最近更新 更多