<?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;
}
?>
这没有意义。正如你所说,自动加载发生在类被引用的时候。
如何被引用?让我们看看:
- 使用
$object = new TheClassName()
-您已经有了您的实例。为什么要自动创建另一个呢? - 使用静态方法调用,访问静态属性或常量
TheClassName::I_NEED_THIS_CONSTANT
-如果我访问静态方法/属性/常量,为什么我需要一个自动创建的实例? - 调用
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(因为它可能在将来被弃用或删除)。