2013-07-16 2 views
-1

Я получаю следующее сообщение об ошибке:

PHP Fatal error: Access level to Database::$db must be public (as in class phpLive) in C:\Users\ryannaddy\Documents\NetBeansProjects\phpLive\plugins\Database\Database.plugin.php on line 92

Fatal error: Access level to Database::$db must be public (as in class phpLive) in C:\Users\ryannaddy\Documents\NetBeansProjects\phpLive\plugins\Database\Database.plugin.php on line 92

Часть класса 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 находится в классе/файле 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; 
    } 
} 

Выбор работает нормально, но как только я добавляю каждый метод (находится в классе phpLive), я получаю вышеуказанную ошибку. Что я могу сделать, чтобы сделать эту работу?

+0

Что находится в C: \ Users \ ryannaddy \ Documents \ NetBeansProjects \ phpLive \ plugins \ Database \ Database.plugin.php в строке 92? – Gordon

+0

@Gordon Это на этой строке: '}' –

ответ

1

Должна быть приватная переменная с именем $ db в файле Database. plugin.php или ее дочернем классе.

+0

Вы можете вставить весь контент файла Database.plpl.php здесь. – srain

+0

Вы были правы! 'private $ db = null' в файле' Database.plugin.php' Он избавился от этой ошибки, но теперь это новая несвязанная ошибка с PDO, которую мне нужно выяснить! –

+0

Я встречал эту ситуацию много раз, удачи! – srain