[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: доступ к свойству внутри статического метода
moskitos80
Всем привет! Запарился я поиск мучить - у меня такой длинный вопрос: как получить доступ к свойству внутри статического метода.
Например:


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/'; делаешь её статической.
Либо создаешь внутири статического метода - экземпляр класса.


Спустя 2 минуты, 3 секунды (15.03.2010 - 16:08) glock18 написал(а):
spl_autoload_register("self::load");

замени на

spl_autoload_register(array(__CLASS__, 'load'));

Спустя 10 минут, 46 секунд (15.03.2010 - 16:19) moskitos80 написал(а):
Спасибо как всегда glock18 - Весьма полезная информация. А то я вдруг поймал себя на том, что совершенно не знаком с константами в ооп - их ипостасях.
stepan - Наверно не буду разрушать себе мозг и буду делать как Вы подсказали.
Вот плоды ваших подсказок и моего пыхтенья - работает олично, если кинуть в корень.

ЗЫ
Угадайте с одного разА, что это? laugh.gif

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
боюсь предположить... это автозагрузчик? smile.gif

PS:
moskitos80
сорри, твой пост удалил. он был жутко похож, а потом ты отредактировал его...

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

Спустя 3 минуты, 8 секунд (15.03.2010 - 16:26) glock18 написал(а):
Цитата
не очень пока доезжаю зачем, но тоже работает!


собственно только так и надо callback описывать, если это метод. self::method вовсе необязательно будет работать, так как в документации описан именно способ описания массивом.


_____________
Сложное - просто. Простое сложно.
Быстрый ответ:

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