[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: методы + статичные методы
HErATuB
Доброго времени суток. Решил написать класс работа с парсингом XML файлов. В классе кроме методов будут статичные методы, и вот я не могу понять плюсы статичных методов кроме как запуск без создание экземпляра класса.
Где то на просторах интернета я видел что статичные методы работают с самим классом.
Вот начало моей работы:

class XML{
private $files = array();
private static $cl;

public function __construct($f){
if(is_array($f))
$this->files = $f;
else
$this->files[] = $f;
}

public static function start($f){
$s = new XML($f);
self::$cl = $s;
return $s;
}

public static function test_file(){
print_r(self::$cl->files);
}

}


Так как я пытался не использовать статичные методы появилось ряд вопросов:
1. Плюсы статичных методов?
2. Правильно ли так работать, как написано в коде?
kaww
По поводу самой идеи http://php.net/manual/en/book.simplexml.php
Статические методы удобно использовать там, где для его работы не требуется создание экземпляра. Например, фабричные методы часто имеет смысл делать статичными, коим по-сути и является XML::start()
В приведенном листинге вообще не понятно предназначение $cl;
HErATuB
Цитата (kaww @ 6.06.2013 - 08:27)
В приведенном листинге вообще не понятно предназначение $cl;

Цитата (HErATuB @ 6.06.2013 - 08:16)
2. Правильно ли так работать, как написано в коде?

Это звучит так: "Я отказываюсь создавать экземпляр класса, но на будущее создам и запомню его".
Вот и здесь на будущие.
kaww
Цитата (kaww @ 6.06.2013 - 08:27)
Это звучит так: "Я отказываюсь создавать экземпляр класса, но на будущее создам и запомню его".
Вот и здесь на будущие.

Он будет ведь постоянно переписываться новым экземпляром! "Запомнить" таким способом не выйдет
HErATuB
Да, на примере он будет переписываться. Но если модернизировать

class XML{
private $files = array();
private static $cl = array();

public function __construct($f){
if(is_array($f))
$this->files = $f;
else
$this->files[] = $f;
}

public static function start($f){
$s = new XML($f);
array_push(self::$cl, $s);
return $s;
}

public static function test_file(){
print_r(self::$cl->files);
}

}


или просто создать объект он будет вести себя как нормальный объект.
Тогда будет массив экземпляров объектов, что является не правильной работай.
А если в примере нужно всего 1 экземпляр?
Быстрый ответ:

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