[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ООП и свойства
artsemilapko
Здравствуйте. В общем такая ситуация...

class A {
private $variable;

public function func() {
...
$variable2 = 4 + 5;
$this->variable .= $variable2;
...
return что-нибудь
}
}


В общем вопрос.По какому принципу объявлять или не объявлять переменные? От каких это факторов зависит? :blink:
Может я чего-то где-то недочитал, но просмторел много инфы и насчет этого ничего не нашел. Помогите плиз. Хочу начать проект на php (mvc) и без этого не хочу начинать.
Заранее Спасибо.
Игорь_Vasinsky
public - доступ к ним как в классе, так и за его пределами
private - доступ в классе и дочерних
protected - доступ только в самом классе

вроде так rolleyes.gif

вот и думай - как написать так - чтоб случайно, другим кодом не получилось взаимодействовать с ними.

это если не ошибаюсь из книги AS3

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
alexbel2404
protected - доступ в классе и дочерних
private - доступ только в самом классе

Перепутал малёх)
Игорь_Vasinsky
аа.. ну бывает)
вообще-то логично)

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
bodja
Цитата
В общем вопрос.По какому принципу объявлять или не объявлять переменные? От каких это факторов зависит? blink.gif


Зависит от того , будете ли вы предоставлять интерфейс для этого класса, а в остальном пофигу, можно забить. К mvc это точно никакого отношения не имеет , так что не стесняйтесь.
SlavaFr
Цитата (bodja @ 27.10.2012 - 10:19)
Цитата
В общем вопрос.По какому принципу объявлять или не объявлять переменные? От каких это факторов зависит? :blink:


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

как то не понятно отношение переменныех к интерфейсу.

Если для реализации функционала требуются переменные(свойства), то их надо объявлять всегда и не забывать в коментарии указывать их тип.

Плохие пример который будет работать
class X
{
public function __construct()
{
$this->neizvestnaja = 'neizvestnaja';
}
public function getNeizvestnaja()
{
return $this->neizvestnaja;
}
}


$x = new X();
echo $x->getNeizvestnaja()."\n";

echo $x->neizvestnaja;


Сразу видно:
1) что необъявленая переменная берется в функции из не откуда, и пока ты не зааглянеш специально в конструктор, то и не догадаешся вообще от куда она берется.

2) echo $x->neizvestnaja; Здесь мы видем, что переменная эта еще и доступна с наружи и является public. Tak же не понятно от куда она берется.

Еще пример для введения в заблуждение

class Y { 
public function getBublik(){ return $this->bublik; }
}

$y = new Y;
$y->bublik = "prjanik";
echo $y->getBublik()."\n";

$y = new Y;
echo $y->getBublik();


попробуй потом через месяц разобратся почему в первом вызове работает а во втором нет, А самое главное почему это должно вообще работать :)

Короче обьявляй все что можно.



Что касается Видемости свойст класса, то лучше их все держать только privat.
Общатся с ними только при помощи set и get методов и тогда даже отпадет надобность делать эти переменные protected.

Конструкции типа $objekt->peremennaja = "vlaue" преминять только в stdClass или в нетипизированных конструкциях без функционала.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.