Неустранимая ошибка PHP: невозможно использовать объект типа DataAccess в качестве массива - PullRequest
1 голос
/ 24 декабря 2011

Я не могу понять, почему я получаю следующую ошибку в PHP:

Неустранимая ошибка: невозможно использовать объект типа DataAccess в качестве массива в / filename в строке 16.

Вот соответствующий код для файла:

class StandardContext implements IStandardContext
{
    private $dataAccess;

    // (CON|DE)STRUCTORS
    function __construct($config)
    {
        $this->dataAccess = new DataAccess($config['db']); //this is line 16
    }

$ config относится к следующему:

$config = require(dirname(__FILE__)./*truncated*/.'Config.php');

Вот соответствующий код для Config.php:

return array(

    // Database connection parameters
    'db' => array(
        'host' => 'localhost',
        'name' => 'visum',
        'user' => 'root',
        'password' => ''
    )
);

Вот соответствующий код для объекта DataAccess:

class DataAccess
{
    private $link;
    private $db;

    function __construct($dbConfig)
    {            
        $this->link = mysql_connect( $dbConfig['host'], $dbConfig['user'], $dbConfig['password'] ) or die(mysql_error());
        $this->db = $dbConfig['name'];
        mysql_select_db($this->db) or die(mysql_error());
    }

Буду признателен за любую помощь, я довольно новичок в PHP и абсолютно озадачен.

Редактировать: Кстати, я включил следующий код для тестирования StandardContext, который на самом деле работает (т.е. он позволяет мне вносить изменения в базу данных дальше, чем я показал)

class StandardContext_index_returns_defined_list implements ITest
{
    private $dataAccess;

    function __construct($config)
    {
        $this->dataAccess = new DataAccess($config['db']);
    }

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

Это почти как если бы вы пытались использовать одноэлементный шаблон, но для каждого объекта StandardContext, который вы создаете, вы передаете параметры базы данных (через массив $ config).Я думаю, что происходит то, что вы передаете массив $ config более одного раза, после первого прохода $ config уже не массив, а экземпляр класса DataAccess, поэтому вы получаете эту ошибку.Вы можете попробовать следующее:

class StandardContext implements IStandardContext
{
    private $dataAccess;

    // (CON|DE)STRUCTORS
    function __construct($config)
    {
        if ($config instanceof DataAccess) {
            $this->dataAccess = $config;
        } elseif ((is_array($config)) && (array_key_exists('db', $config))) {
            $this->dataAccess = new DataAccess($config['db']); 
        } else {
            throw new Exception('Unable to initialize $this->dataAccess');
        }
    }
0 голосов
/ 24 декабря 2011

это проблема с вашим

private $dataAccess;

проверьте объект массива здесь

http://www.php.net/manual/en/class.arrayobject.php

всякий раз, когда вы объявляете вне метода внутри класса, он будет рассматриваться какObject, поэтому вы должны объявить внутри метода или объявить как сам метод, иначе удалите из вашего класса инструменты.

ваш $ dataAccess является объектом, поскольку вы объявляете его вне метода и вашего нового DataAccess ($ config ['db ']) вернет arrayObject, потому что вы реализуете его, поэтому он пытается преобразовать из Object в arrayObject выдает ошибку

...