我可以在另一个类中实例化一个PHP类吗?

Ric*_*ard 44 php oop class object

我想知道是否允许在另一个类中创建一个类的实例.

或者,我是否必须在外部创建它,然后通过构造函数传递它?但是我会在不知道是否需要它的情况下创建它.

示例(数据库类):

class some{

if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db
Run Code Online (Sandbox Code Playgroud)

Luk*_*ský 36

您无法在另一个类中定义类.您应该包含该类之外的其他类的文件.在你的情况下,这将给你两个顶级类dbsome.现在在构造函数中,some您可以决定创建一个实例db.例如:

include SITE_ROOT . 'applicatie/' . 'db.class.php';

class some {

    public function __construct() {
        if (...) {
            $this->db = new db;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`require`而不是`include`. (10认同)
  • @ rink.attendant.6`require_once`是更好的:D (6认同)
  • 这对于利用依赖注入设计模式来说也是一个好的情况. (2认同)

vin*_*tDV 17

人们说可以"在类中创建一个类"似乎意味着可以在类中创建一个对象/实例.我还没有看到另一个类定义中的实际类定义的示例,它看起来像:

class myClass{

    class myNestedClass{

    }

}

/* THIS IS NOT ALLOWED AND SO IT WON'T WORK */
Run Code Online (Sandbox Code Playgroud)

由于问题是'是否可以另一个类中创建一个类',我现在只能假设它不可能.


ric*_*tie 14

我只想指出可以在另一个类定义中动态加载类定义.

Lukas是正确的,我们不能在另一个类中定义一个类,但我们可以动态地包含()或require()它们,因为包含文件中定义的每个函数和类都将具有全局范围.如果需要动态加载类或函数,只需将文件包含在其中一个类的函数中.你可以这样做:

function some()
{
    require('db.php');
    $db = new Db();
    ...
}
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.include.php

  • 对于动态类加载,我建议使用`require_once`或`include_once` - 这样你就可以确保你没有多次包含/需要它:) (2认同)
  • 在这种情况下,您应该使用"include_once"因为"require"将在该文件(其中包含函数定义)包含在系统中时调用.但您可以在子例程中使用include或include_once.它会在指针进入该子程序时执行 (2认同)