Четверг, 28 Ноября 2024, 05:31

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Несколько интересных вопросов по PHP
dima9595Дата: Воскресенье, 11 Января 2015, 15:29 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Очередной привет!
На днях продолжил кодить и появились очередные вопросы, которые не дают мне спокойно спать)))

1. Иногда, когда прохожу по чужому коду, то замечаю 2 вида вызова классов. Например, у нас есть класс Users. Так вот, бывают вызовы этого класса $users->метод или Users::метод...
Вопрос: Что лучше использовать, ведь оба файла подключаются через include_ или require_. Значит разницы нет!?

2. Недавно прочитал про функцию spl_autoload_register, но при использовании, почему-то не работают методы (Проверял через __construct() - всё работает).
Код
spl_autoload_register(function($name){
       require ENGINE_DIR.'classes/'.$name.'.php';
});


Ошибка:
Код
Fatal error: Call to a member function load_tpl() on a non-object...


Кстати, заметил что __construct() работает в том случае, если использовать вызов класса производится через название_класса::название_метода/
Вопрос: Почему не грузятся методы и стоит ли вообще использовать spl_autoload_register и подобные функции.

Заранее благодарю!




Сообщение отредактировал dima9595 - Воскресенье, 11 Января 2015, 15:36
Snake174Дата: Воскресенье, 11 Января 2015, 15:59 | Сообщение # 2
участник
Сейчас нет на сайте
Users::method() обычно используют для вызова статических методов класса.

Цитата
Почему не грузятся методы

$users = new Users();
$users->method();

Все нормально должно грузиться.


Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
dima9595Дата: Воскресенье, 11 Января 2015, 16:19 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Snake174, спасибо за ответы!
Цитата Snake174 ()
$users = new Users();

По сути объект уже объявлен в файле класса, стоит ли ещё раз писать?
Цитата Snake174 ()
Users::method() обычно используют для вызова статических методов класса.

А скорость не будет падать, если использовать его не только для статики!?


Snake174Дата: Воскресенье, 11 Января 2015, 16:39 | Сообщение # 4
участник
Сейчас нет на сайте
Цитата
По сути объект уже объявлен в файле класса, стоит ли ещё раз писать?

Не нужно. Главное чтобы конфликтов с именами не было :-)

Цитата
А скорость не будет падать, если использовать его не только для статики!?

По идеи не должно работать, если метод не статичный. С РНР мало знаком.


Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
JackNazaryanДата: Пятница, 16 Января 2015, 23:25 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата dima9595 ()
1. Иногда, когда прохожу по чужому коду, то замечаю 2 вида вызова классов. Например, у нас есть класс Users. Так вот, бывают вызовы этого класса $users->метод или Users::метод...
Вопрос: Что лучше использовать, ведь оба файла подключаются через include_ или require_. Значит разницы нет!?

$users::method используется для статических функций, когда создавать экземпляр класса не нужно
Цитата dima9595 ()
Вопрос: Почему не грузятся методы и стоит ли вообще использовать spl_autoload_register и подобные функции.

А чем не устраивает function __autoload?

Добавлено (16 января 2015, 23:23)
---------------------------------------------

Цитата dima9595 ()
А скорость не будет падать, если использовать его не только для статики!?

Практические примеры покажите, тогда будет ответ точнее

Добавлено (16 января 2015, 23:25)
---------------------------------------------
Или вообще делайте так:

Код
function my_autoloader($class) {
     include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');
dima9595Дата: Суббота, 17 Января 2015, 13:41 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата JackNazaryan ()
function __autoload

говорят что она уже устарела
Цитата JackNazaryan ()
Практические примеры покажите, тогда будет ответ точнее

пока не чего. со статикой разобрался)
Всем спасибо за ответы! Всем плюсег поставлю)


JackNazaryanДата: Понедельник, 19 Января 2015, 15:53 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата dima9595 ()
говорят что она уже устарела

Если она устареет, в документации будет уведомление: "Функция устарела, будет удалена в скором времени"
Щас она остаётся актуальной
dima9595Дата: Понедельник, 19 Января 2015, 17:30 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
JackNazaryan, вот от куда прочитал: http://myrusakov.ru/php-spl-autoload.html

JackNazaryanДата: Понедельник, 19 Января 2015, 19:04 | Сообщение # 9
старожил
Сейчас нет на сайте
dima9595, Михаил Русаков, конечно, неплохой веб-разработчик. Однако от этого autoload не становится баяном. Для него может и устарела, у меня же всё прекрасно до сих пор... в общем это не суть важно, у всех свои вкусы
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг