Ошибка при назначении публичного свойства

function CharField($len)
{
    return "VARCHAR($len)";
}


class ArticleModel extends Model
{
    public $name = CharField(100); // Error Here
}

Когда я назначаю публичное свойство, подобное этому, с возвращаемым значением из функции, оно выдает ошибку:

Ошибка анализа PHP: синтаксическая ошибка, неожиданное '(', ожидание ',' или ';' в /var/www/test/db.php

В чем может быть причина?


person Abhilash Nanda    schedule 11.11.2011    source источник
comment
Чего вы пытаетесь достичь? Вы хотите, чтобы свойство $name содержало строковый литерал VARCHAR(100)? Или вы хотите, чтобы свойство $name было строковым значением до 100 символов?   -  person liquorvicar    schedule 11.11.2011
comment
На самом деле я пытаюсь написать очень поверхностную реализацию ORM. Этот класс можно разделить на подклассы, и подклассы будут преобразованы в таблицу со свойствами в виде имени столбца. Позже, при доступе к объекту, мы можем обновить таблицу, просто присвоив значения свойствам... аналогично тому, как это делает Django... В любом случае, я думаю, мне нужно найти другой способ, так как это не может быть достигнуто путем Я направляюсь в... Я хотел бы, чтобы вы могли чем-то помочь... Спасибо!!!   -  person Abhilash Nanda    schedule 11.11.2011


Ответы (3)


Инициализировать значение в вашем конструкторе

person mark_dj    schedule 11.11.2011

Вы можете только инициализировать свойства с константами:

http://www.php.net/manual/en/language.oop5.properties.php

[Свойства] определяются с помощью одного из ключевых слов public, protected или private, за которым следует обычное объявление переменной. Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна иметь возможность оцениваться во время компиляции и не должна зависеть от информации времени выполнения для того, чтобы быть оцененной.

Так что действительно, инициализируйте их в своем конструкторе.

person CodeCaster    schedule 11.11.2011
comment
Спасибо всем... Думаю, мне нужно найти какой-то другой способ... :( - person Abhilash Nanda; 11.11.2011

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

person jondro    schedule 11.11.2011