Например:
class Autoload
{
const DS = DIRECTORY_SEPARATOR;
public $root= 'empty/';
public static function load($class_name)
{
$class_name = strtolower($class_name);
$path = str_replace('_',self::DS,$class_name);
include_once(self::$root.self::DS.$path.'.php');//Как теперь $this->root здесь использовать?
}
public static function register()
{
spl_autoload_register("self::load");
}
}
$this-> Использовать нельзя, self::$root - ругается на отсутствие статич. переменной, self::root - соответственно ругается на отсутствие константы.
Скажите ВооБЩЕ можно использовать свойства класса в статич. методах?
Можно ли и self:: - ы вообще использовать?
И ещё вопрос как присвоить константе значение выражения при инициализации в классе?
(так как ниже естественно не прокатывает) :
class Autoload
{
const DS = DIRECTORY_SEPARATOR;
const ROOT = dirname(__FILE__).self::DS;
/*___ здесь типа код____*/
}
Спустя 55 минут, 29 секунд (15.03.2010 - 15:49) glock18 написал(а):
свойство должно быть статическим, чтобы можно было использовать его внутри статического метода. если нужно использовать свойство объекта, то этот объект нужно передавать в метод параметром или получать его внутри.
Спустя 4 минуты, 29 секунд (15.03.2010 - 15:54) stepan написал(а):
moskitos80 Будет гораздо проще определить константу перед классом
Спустя 11 минут, 54 секунды (15.03.2010 - 16:06) Oyeme написал(а):
this может указывать на производные классы.
Либо ты public $root= 'empty/'; делаешь её статической.
Либо создаешь внутири статического метода - экземпляр класса.
Либо ты public $root= 'empty/'; делаешь её статической.
Либо создаешь внутири статического метода - экземпляр класса.
Спустя 2 минуты, 3 секунды (15.03.2010 - 16:08) glock18 написал(а):
spl_autoload_register("self::load");
замени на
spl_autoload_register(array(__CLASS__, 'load'));
замени на
spl_autoload_register(array(__CLASS__, 'load'));
Спустя 10 минут, 46 секунд (15.03.2010 - 16:19) moskitos80 написал(а):
Спасибо как всегда glock18 - Весьма полезная информация. А то я вдруг поймал себя на том, что совершенно не знаком с константами в ооп - их ипостасях.
stepan - Наверно не буду разрушать себе мозг и буду делать как Вы подсказали.
Вот плоды ваших подсказок и моего пыхтенья - работает олично, если кинуть в корень.
ЗЫ
Угадайте с одного разА, что это?
stepan - Наверно не буду разрушать себе мозг и буду делать как Вы подсказали.
Вот плоды ваших подсказок и моего пыхтенья - работает олично, если кинуть в корень.
ЗЫ
Угадайте с одного разА, что это?
define('DS',DIRECTORY_SEPARATOR);
define('ROOT',dirname(__FILE__));
class Autoload
{
static private function load($class_name)
{
$class_name = strtolower($class_name);
$path = str_replace('_',DS,$class_name);
include_once(ROOT.DS.$path.'.php');
}
static public function register()
{
spl_autoload_register("self::load");
}
}
Autoload::register();
Спустя 3 минуты, 15 секунд (15.03.2010 - 16:22) moskitos80 написал(а):
spl_autoload_register(array(__CLASS__, 'load'));
??? - не очень пока доезжаю зачем, но тоже работает!
По ф-ции: "spl_autoload_register" - документацию на русском днем с огнём...
Спустя 1 минута, 13 секунд (15.03.2010 - 16:23) glock18 написал(а):
moskitos80
боюсь предположить... это автозагрузчик?
PS:
moskitos80
сорри, твой пост удалил. он был жутко похож, а потом ты отредактировал его...
сейчас гляну, тут вроде спасти его можно как-то.
боюсь предположить... это автозагрузчик?
PS:
moskitos80
сорри, твой пост удалил. он был жутко похож, а потом ты отредактировал его...
сейчас гляну, тут вроде спасти его можно как-то.
Спустя 3 минуты, 8 секунд (15.03.2010 - 16:26) glock18 написал(а):
Цитата |
не очень пока доезжаю зачем, но тоже работает! |
собственно только так и надо callback описывать, если это метод. self::method вовсе необязательно будет работать, так как в документации описан именно способ описания массивом.
_____________
Сложное - просто. Простое сложно.