看PHP文档,他们说
任何有效的代码都可以出现在函数中,甚至可以出现在其他函数和类定义中。
在函数内部有一个类定义的用例吗?我见过函数内部的函数定义,尤其是匿名函数,但是类呢?
函数中的类定义将不会被解析,除非该函数运行。这同样适用于if
语句中的任何类型的定义。在if
语句中可以使用定义:
if (!function_exists('foo')) {
function foo ..
}
这对于向后兼容垫片等非常有用。将其扩展到函数内部也很有意义,为什么不想将您的shim代码封装到函数中呢?
除了有条件地声明类和函数之外,它没有任何实际用途。以这种方式声明的类和函数可以像任何其他类或函数一样全局访问,只是它们的声明延迟到函数被调用。还要注意,如果调用这样的函数两次(class Foo already defined
),将触发一个错误,除非您采取了class_exists
那样的预防措施。
看看任意的类加载器(例如Composer的ClassLoader::includeFile()
),我想说它们都将在一个方法中require/include
请求的类,有效地在该方法中定义一个类。
对于类方法来说,如果你想创建一个只是函数的类装入器,你现在可以这样做。还要注意,PHP中的第一个类加载器只能通过实现函数__autoload()
来实现。