php中扩展一个类和在另一个类中创建实例的区别

Md *_*iam 5 php oop instantiation

第一个文件:

class Class_one {

    public function __construct() {

    }

    public function show_name() {
        echo "My Name is Siam";
    }

    public function show_class() {
        echo "I read in class 7";
    }

}
Run Code Online (Sandbox Code Playgroud)

第二个文件:

<?php

require_once './Class_one.php';

class Class_two {

    public $class_one;

    public function __construct() {
        $aa = new Class_one();
        $this->class_one = $aa;
    }

    public function history() {
        $this->class_one->show_name();
    }

}

$ab = new Class_two();
$ab->history();
Run Code Online (Sandbox Code Playgroud)

如果我不在 class_two 中实例化 class_one 并将 class_one 扩展到 class_two 会发生什么?有什么区别吗?

Mac*_*ity 2

这里只有一个潜在的问题:Class_two无法直接访问Class_one私有/受保护的方法和变量。这可能是一件好事(封装是一个类执行某些特定任务并且您不希望子级干扰它),但它也可能意味着您无法获取所需的数据。

我建议您作为Class_two依赖注入(如您的示例所示),但是

class Class_two {

    public $class_one;

    public function __construct(Class_one $class) {
        $this->class_one = $class;
    }
}
Run Code Online (Sandbox Code Playgroud)