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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обращение :: или ->

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Правильное обращение к классам
RoboStudent
Отправлено: 25 Апреля, 2011 - 21:35:58
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




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

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

вызываю

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

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


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

Суть вопроса - как мне быть, где я не прав, как лучше или правильнее, есть ли существенная разница?
Заранее премного благодарен за любую наводку и объяснение!
 
 Top
Viper
Отправлено: 25 Апреля, 2011 - 23:26:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




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


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
RoboStudent
Отправлено: 25 Апреля, 2011 - 23:31:53
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




То есть если я использую автозагрузку такого типа

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


и пользуюсь только статическим методом, это нормально?
Это очень удобно для меня, но что-то не дает мне "спать спокойно", по этому поднял тему.
 
 Top
Viper
Отправлено: 26 Апреля, 2011 - 00:01:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




RoboStudent может быть и так
PHP:
скопировать код в буфер обмена
  1.  
  2. $class = ClassName::method();
  3. $new = $class->new_method();

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

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

оно конечно удобно, но не всегда. имхо лучше подключить необходимое там где нужно, либо в конструкторе.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
RoboStudent
Отправлено: 26 Апреля, 2011 - 00:06:39
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Понял. Ну что, на этом наверное всё. Буду дальше копать-бороздить, с опытом придет )
Спасибо большое за ответ!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB