初始化同一个文件中的类


Initialize class in the same file

这可能看起来像一个愚蠢的问题,但是,在同一个文件中初始化类或调用它的一个函数是一个好的做法吗?我的意思是像这样:

<?php
class MyClass {
    public function __construct($param) {
    }
    public static function MyFunction() {
    }
}
$Obj = new MyClass('hello');
MyClass::MyFunction();
?>

这工作得很好,但我很好奇,如果这是一个好的做法,从功能和可访问性的角度来看。

不,这不是好的做法。PSR甚至将此写入了第三点:

文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改。ini设置等),但不应该两者都做。

创建变量、类实例和调用代码是"副作用"。如果您从不同的位置多次包含该文件,或者只是在当前作用域中隐式地创建一个变量,而没有任何方法可以避免这种情况,则会导致问题。

这不是一个好方法,最好在合适的名称空间中在自己的文件中定义类,并更好地使用自动加载加载类。阅读自动加载和编写器,这是一个更干净的方式来组织你的项目。

No。:)

如果你想使用基于类的继承,你应该坚持使用单独的文件来定义类的编码标准。您应该有一个MyClass.php文件,该文件只声明类而不声明其他任何内容。将此文件包含在另一个php脚本中,并在其中实例化该类。

然而

:你现在写它的方式是,如果你对类不感兴趣,只对一个对象感兴趣。为什么使用基于类的继承而不是原型继承?在原型继承中,你声明一个通用对象并用属性和方法"装扮"它:

$Obj = (object)[ 'property' => 'value'];
$Obj->method = function() { ... };