2013-09-19 3 views
3

Вот мой код:Недопустимый аргумент, предоставленный foreach(); Массив не установлен должным образом

class Subscriber extends DatabaseObject { 

    protected static $table_name = "email_list"; 
    protected static $db_fields = array('id', 'email'); 

    public $id; 
    public $email; 

    function __construct() { 
     self::$object = new Subscriber; 
    } 
} 

В родительском классе, DatabaseObject, проблема:

class DatabaseObject { 

    protected static $object; 
    protected static $db_fields; 

    protected function attributes() { 
    $attributes = array(); 
    foreach (self::$db_fields as $field) { 
     // edited 
    } 
    return $attributes; 
} 

Однако я получаю Warning: Invalid argument supplied for foreach() из линии:

foreach (self::$db_fields as $field) {

Почему массив не установлен? Я попытался установить его в constructor вручную, но он тоже не работал.

+0

Глядя на ваш code, '$ db_fields' не похож на массив. 'foreach' ожидает массив, поскольку это первый аргумент. Просмотрите документацию 'foreach' [здесь] (http://php.net/manual/en/control-structures.foreach.php). – War10ck

+3

Late Static Binding: 'foreach (static :: $ db_fields as $ field) {' ' –

ответ

3

Метод в DatabaseObject будет иметь доступ к $db_fields собственности от DatabaseObject, а не от Subscriber, если вы не используете late static binding через static ключевого слова, а не self

foreach (static::$db_fields as $field) { 

требует PHP> = 5.3.0

+0

Узнай что-нибудь новое каждый день. +1 – War10ck

+0

отлично; Благодарю. Я всегда хотел знать, как это работает. не понимал, что это был пример этого. – KickingLettuce

Смежные вопросы