PHP OOP -自动初始化对象


PHP OOP - Autoinitiate objects

<?php function __autoload($class_name)
{
  include_once 'inc/classes/class.' . $class_name . '.inc.php';
}

?>

现在我使用__autolload来自动加载我的类,每当他们被使用。但是我在想,为什么不自动启动对象本身,所以你不必在页面本身启动对象,你可以调用一个类的属性,而不启动对象。

但是这里我卡住了,我以为我可以像下面的例子一样做,但它不起作用,对象没有开始。

<?php
function __autoload($class_name)
{
  include_once 'inc/classes/class.' . $class_name . '.inc.php';
  '$'.$class_name = new $class_name;
 }

 ?>

这没有意义。正如你所说,自动加载发生在类被引用的时候。

如何被引用?让我们看看:

  1. 使用$object = new TheClassName() -您已经有了您的实例。为什么要自动创建另一个呢?
  2. 使用静态方法调用,访问静态属性或常量TheClassName::I_NEED_THIS_CONSTANT -如果我访问静态方法/属性/常量,为什么我需要一个自动创建的实例?
  3. 调用class_exists() -为什么我需要一个自动创建的实例,如果我只是想检查类是否存在?

试试这个:

$$class_name = new $class_name();

您也可以尝试使用{}。在您的示例中,它将是:

${$class_name} = new $class_name;

使用${}可以创建如下动态变量:

$i = '1';
${'tmp' . $i} = 'Hello world';
echo $tmp1; // Hello world

您还应该使用spl_autoload_register而不是__autolload(因为它可能在将来被弃用或删除)。