Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обращение :: или ->
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Обращение :: или ->

Страниц (1): [1]
 

1. RoboStudent - 25 Апреля, 2011 - 21:35:58 - перейти к сообщению
Приветствую!
Сколько бы я не шерстил документаций и учебников, нигде нет явного ответа на мой вопрос.
Возможно я не правильно воспринял "общую картину".
Допустим, я пишу:

PHP:
скопировать код в буфер обмена
  1. class foo {
  2.         function bar() {
  3.                 return true;
  4.         }
  5. }

вызываю

PHP:
скопировать код в буфер обмена
  1. $test = new foo;
  2. echo $test->bar();

В таком случае, чтобы из другого класса обратиться к функции bar(), он должен его унаследовать (extends).
Но если я пишу:


результат тот же, но тогда я могу обращаться к функции bar() отовсюду, что в некоторых случаях нежелательно для меня.

Суть вопроса - как мне быть, где я не прав, как лучше или правильнее, есть ли существенная разница?
Заранее премного благодарен за любую наводку и объяснение!
2. Viper - 25 Апреля, 2011 - 23:26:12 - перейти к сообщению
Статик же не наследует весь класс, а значит не создает копию всего класса в памяти. К тому же чтобы не было доступа можно прописать приватный метод.
3. RoboStudent - 25 Апреля, 2011 - 23:31:53 - перейти к сообщению
То есть если я использую автозагрузку такого типа

PHP:
скопировать код в буфер обмена
  1. function __autoload($class_name) {
  2.         return (require_once(P_CORE . $class_name . '.php')) ? true : false;
  3. }


и пользуюсь только статическим методом, это нормально?
Это очень удобно для меня, но что-то не дает мне "спать спокойно", по этому поднял тему.
4. Viper - 26 Апреля, 2011 - 00:01:04 - перейти к сообщению
RoboStudent может быть и так
PHP:
скопировать код в буфер обмена
  1.  
  2. $class = ClassName::method();
  3. $new = $class->new_method();

тогда к статику логичней через ссылку обратится.

RoboStudent пишет:
Это очень удобно для меня

оно конечно удобно, но не всегда. имхо лучше подключить необходимое там где нужно, либо в конструкторе.
5. RoboStudent - 26 Апреля, 2011 - 00:06:39 - перейти к сообщению
Понял. Ну что, на этом наверное всё. Буду дальше копать-бороздить, с опытом придет )
Спасибо большое за ответ!

 

Powered by ExBB FM 1.0 RC1