Database :: $ db的访问级别必须是公共的

时间:2013-07-16 14:47:01

标签: php class access-levels

我收到以下错误:

  

PHP致命错误:在第92行的C:\ Users \ ryannaddy \ Documents \ NetBeansProjects \ phpLive \ plugins \ Database \ Database.plugin.php中,Database :: $ db的访问级别必须是公共的(如类phpLive中)

     

致命错误:在第92行的C:\ Users \ ryannaddy \ Documents \ NetBeansProjects \ phpLive \ plugins \ Database \ Database.plugin.php中,Database :: $ db的访问级别必须是公共的(如类phpLive中) / p>

课程phpLive.php的一部分。这就是我的Database :: $ db属性的创建方式。如您所见,它是一个动态创建的属性。然后我使用__get()来访问该属性,就像我的下一个代码块一样。

<?php
class phpLive{
    public function loadPlugin($class, $info){
        $this->functionName = __FUNCTION__;
        $info               = (object)$info;
        $file               = $this->location . "/plugins/" . $info->root . "/" . $info->fileName;
        if(is_file($file)){
            require_once $file;
            $instance                   = (string)$info->instanceName;
            $info                       = (isset($info->information)) ? $info->information : "";
            $reflection = new ReflectionClass($class);
            $this->$instance = $reflection->newInstanceArgs(array($info));
            $this->extension[$instance] = $this->$instance;
            return $this->$instance;
        }
        return false;
    }

    public function __get($name){
        switch($name){
            default:
                if(array_key_exists($name, $this->extension)){
                    $ret = $this->extension[$name];
                }else{
                    $ret = false;
                }
                break;
        }
        return $ret;
    }
}

注意:$class$info是从配置文件中加载的,如下所示:

$plugins = array(
    "Database" => array(
        "root"         => "Database",
        "fileName"     => "Database.plugin.php",
        "instanceName" => "db",
        "sessionRef"   => "db",
        "information"  => array(
            "dbtype"   => "mysql",
            "hostname" => "localhost",
            "database" => "test",
            "username" => "root",
            "password" => "xxx",
        )
    ),
);

这是我使用属性db

的方式
<?php

require_once '../../phpLive.php';

$live->db->select("select * from users where fname in(?,?)", array("Billy", "Bob"))->each(function($col, $name){
    echo "here";
});

因此,方法select位于类{/ 1}}中,扩展了Database.plugin.php

phpLive

选择工作正常,但只要我添加每个方法(在class Database extends phpLive{ public function select(){ $info = $this->queryinfo(func_get_args()); $this->query($info->query, $info->args); return $this; } } 类中找到),我就会收到上述错误。我能做些什么才能做到这一点?

1 个答案:

答案 0 :(得分:1)

文件Database.plugin.php或其子类中必须有一个名为$ db的私有变量。