在一个类中运行多个类,PHP OOP

在一个类中运行多个类,PHP OOP,php,oop,Php,Oop,我有类“用户注册”,在这个类中我需要使用很多类:“位置”,“链接”,“邮件”,“模块” 我在文件中创建包含所有类: 包括“class/location.php”; 包括“class/links.php”; 包括“class/mail.php”; 包括“class/modules.php” 现在创建“用户注册”类 我需要在方法“insert_to_db”中运行类:“Location”、“Links”、“Mail”方法 在“show_info”中运行一些“Location”、“Links”、“M

我有类“用户注册”,在这个类中我需要使用很多类:“位置”,“链接”,“邮件”,“模块”

我在文件中创建包含所有类: 包括“class/location.php”; 包括“class/links.php”; 包括“class/mail.php”; 包括“class/modules.php”

现在创建“用户注册”类


我需要在方法“insert_to_db”中运行类:“Location”、“Links”、“Mail”方法 在“show_info”中运行一些“Location”、“Links”、“Module”类的方法

怎么做?如何在一个班上运行另一个班(没有一个)


谢谢你的帮助;)

有几种方法可以做到这一点。如果您只有两个对象需要另一个类使用,请使用依赖项注入;将每个对象作为参数传递到类的构造函数中,并将这些对象存储为类属性

如果只有一个方法需要该对象,请将该对象作为该方法的参数传递。但我不鼓励这种方法,因为从长远来看,我觉得它妨碍了可扩展性/代码的清洁度

如果您有多个类中需要的许多对象,我建议您将注册表注入到类的构造函数中。注册表是一个单实例(它包含您需要共享的每个对象的一个实例)。在需要使用共享对象的类中,可以调用
$this->registry->get('Some_shared_object')->doSomething()


依赖项注入(在构造函数处)


依赖项注入(在方法处,不推荐)


使用注册表的依赖项注入

class Registry {
    var $data = array();

    function __get($key) {
        return $this->get($key);
    }

    function __set($key, $value) {
        $this->set($key, $value);
    }

    /**
    * Retrieve a resource from the registry.
    *
    * @param string
    * @return mixed|null
    */
    function get($key) {
        return isset($this->data[$key]) ? $this->data[$key] : NULL;
    }

    /**
    * Store a resource in the registry.
    *
    * @param string
    * @param mixed
    */
    function set($key, &$value) {
        $this->data[$key] = $value;
    }

    /**
    * Check if a resource exists in the registry.
    *
    * @param string
    * @return boolean
    */
    function has($key) {
        return isset($this->data[$key]);
    }
}

class Foo {
    protected $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function foo() {
        $this->registry->dependency1->doSomething();
    }
}

$dependency1 = new Dependency1();
$registry = new Registry();
$registry->set('dependency1', $dependency1);

$foo = new Foo($registry);
$foo->foo();

有几种方法可以做到这一点。如果您只有两个对象需要另一个类使用,请使用依赖项注入;将每个对象作为参数传递到类的构造函数中,并将这些对象存储为类属性

如果只有一个方法需要该对象,请将该对象作为该方法的参数传递。但我不鼓励这种方法,因为从长远来看,我觉得它妨碍了可扩展性/代码的清洁度

如果您有多个类中需要的许多对象,我建议您将注册表注入到类的构造函数中。注册表是一个单实例(它包含您需要共享的每个对象的一个实例)。在需要使用共享对象的类中,可以调用
$this->registry->get('Some_shared_object')->doSomething()


依赖项注入(在构造函数处)


依赖项注入(在方法处,不推荐)


使用注册表的依赖项注入

class Registry {
    var $data = array();

    function __get($key) {
        return $this->get($key);
    }

    function __set($key, $value) {
        $this->set($key, $value);
    }

    /**
    * Retrieve a resource from the registry.
    *
    * @param string
    * @return mixed|null
    */
    function get($key) {
        return isset($this->data[$key]) ? $this->data[$key] : NULL;
    }

    /**
    * Store a resource in the registry.
    *
    * @param string
    * @param mixed
    */
    function set($key, &$value) {
        $this->data[$key] = $value;
    }

    /**
    * Check if a resource exists in the registry.
    *
    * @param string
    * @return boolean
    */
    function has($key) {
        return isset($this->data[$key]);
    }
}

class Foo {
    protected $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function foo() {
        $this->registry->dependency1->doSomething();
    }
}

$dependency1 = new Dependency1();
$registry = new Registry();
$registry->set('dependency1', $dependency1);

$foo = new Foo($registry);
$foo->foo();

作为良好的实践,当我从一个类调用一个类时,我总是使用include\u once/require\u once。这样我就知道,无论在哪里使用一个类,它的引用都会得到处理,并且不会过度使用


我们初始化每个的一个实例,并从那里调用您的方法。不要害怕静态引用。

作为良好的实践,当我从类调用类时,我总是使用include\u once/require\u once。这样我就知道,无论在哪里使用一个类,它的引用都会得到处理,并且不会过度使用


我们初始化每个的一个实例,并从那里调用您的方法。不要害怕静态引用。

您可以创建对象的实例并调用其方法,或者如果合适,将方法设置为静态并静态调用。您可以创建对象的实例并调用其方法,或者,如果合适的话,将方法设置为静态并静态调用它们。您是说在类中包含文件(依赖项,例如类)吗?如果是这样的话,这对灵活性是不利的。您是说在类中包含一个文件(依赖项,例如类)吗?如果是这样的话,这对灵活性是不利的。谢谢,但也许有一些例子?谢谢,但也许有一些例子?
class Foo {
    public function foo($dependency1) {
        $dependency1->doSomething();
    }
}

$foo = new Foo();
$foo->foo($dependency1);
class Registry {
    var $data = array();

    function __get($key) {
        return $this->get($key);
    }

    function __set($key, $value) {
        $this->set($key, $value);
    }

    /**
    * Retrieve a resource from the registry.
    *
    * @param string
    * @return mixed|null
    */
    function get($key) {
        return isset($this->data[$key]) ? $this->data[$key] : NULL;
    }

    /**
    * Store a resource in the registry.
    *
    * @param string
    * @param mixed
    */
    function set($key, &$value) {
        $this->data[$key] = $value;
    }

    /**
    * Check if a resource exists in the registry.
    *
    * @param string
    * @return boolean
    */
    function has($key) {
        return isset($this->data[$key]);
    }
}

class Foo {
    protected $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function foo() {
        $this->registry->dependency1->doSomething();
    }
}

$dependency1 = new Dependency1();
$registry = new Registry();
$registry->set('dependency1', $dependency1);

$foo = new Foo($registry);
$foo->foo();