【问题标题】:loading class with __autoload使用 __autoload 加载类
【发布时间】:2013-12-14 16:33:41
【问题描述】:

我正在尝试在不使用任何框架的情况下以 Controller-Model-View 约定编写我的网站,但我遇到了 __autoload 函数的问题。
这是我的 source_folder/model/database.class.php 文件:

<?php
function __autoload($sName) {
    $aName = explode('_',$sName);
    if($aName[0] == 'Model')
        include '/model/' . strtolower($aName[1]) . '.class.php';
    else if($aName[0] == 'View')
        include '/view/' . strtolower($aName[1]) . 'class.php';
    else if($aName[0] == 'Controller')
        include '/controller' . strtolower($aName[1]) . 'class.php';
}
/**
 * Description of database
 *
 * @author Lysy
 */
class Model_Database {
   private $oConfig = new Model_Config();

   $this->oConfig->getConfigArray('database');

}

?>

这是我的 source_folder/model/config.class.php 文件:

<?php
include_once '../config.php';

/**
 * Description of config
 *
 * @author Lysy
 */
class Model_Config {

    static function GetConfigArray($name) {
        return $config[$name];
    }
}

?>

问题出现在一行

private $oConfig = new Model_Config();

它说语法错误,意外的 T_NEW
我不明白问题出在哪里,因为我使用的是 Netbeans IDE,当我输入 private $oConfig = new M 时,程序会通过 Model_Config 提示我。
我很高兴阅读一些关于这个问题的建议和可能的解决方案,问候:)

编辑: 我将类 Model_Config 重写为如下所示:

class Model_Database {

   private $oConfig;

   __construct() {
        $oConfig = new Model_Config();
    };

   $this->oConfig->getConfigArray('database');

}

但是现在一行有问题

__construct() {

Netbeans__construct() 是意外,网站上的错误保持不变,unexpected T_NEW

EDIT2:哦,抱歉,C++ 太多了,我老是忘记function这个词

【问题讨论】:

    标签: php class model autoload


    【解决方案1】:

    您不能使用表达式为成员变量赋值。您必须在构造函数或方法内部执行此操作。

    【讨论】:

    • 当你在它的时候,你也不能做下一行(this-&gt;oConfig-&gt;getConfigArray('database');
    • 我知道这行代码只是为了测试目的而写的。我编辑帖子以表明制作构造函数不能解决问题。
    【解决方案2】:

    您的 Model_Config 是否包含比该静态方法更多的内容,或者您​​为什么使用“new Model_Config()”?

    该错误消息和“私有”看起来像您想直接在您的属性中创建一个对象。如果要将 Model_Config 对象添加到特定类的属性中,则应使用依赖注入。例如,在您的构造函数中:

    <?php
    
    class YourClass
    {
    
        private $oConfig;
    
        public function __construct(Model_Config $oConfig)
        {
             $this->oConfig = $oConfig;
        }
    }
    

    更好的注入方式是使用接口作为类型提示。也许你的 Model_Config 中的那个方法不应该是静态的。

    【讨论】:

    • 这只是为了测试目的,当我试图测试一些东西以查看各种结果并找出导致错误的原因时,我编写了很多无意义的代码。无论如何,我希望 Model_Config 中的静态方法能够访问它们,而无需通过简单的 Config::GetArray 或类似这样的方式创建对象,还希望使用非静态方法来更广泛地使用,而不仅仅是从 config.php 文件中获取一些变量
    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多