Здравствуйте уважаемые форумчане. Хочу разобраться в каких случаях нужно использовать в ООП static переменные и static методы?
Я понимаю что с ними можно работать за пределами класса не создавая объект, но в каких случаях это реально надо, приведите пожалуйста
простенький пример для начинающего
И чем отличается вызов MyClass::method от self:: method?
Игорь_Vasinsky
16.08.2012 - 14:47
статические переменные сохраняют своё значение в скрипте и не обнуляются сами, например в цикле часто использую.
раздел php в пользовательский функциях - рекурсия - статические переменные
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinskyну это еще и сишного к нам пришло, а в ООП какое пременение static свойствам и методам?
AlmazDelDiablo
16.08.2012 - 15:03
Пример из моего движка:
Есть класс Register, который содержит в себе экземпляры всех используемых в движке классов. Все его методы статические, так как благодаря этому не надо передавать в каждую часть движка экземпляр этого реестра, а можно обратиться к статическим методам и свойстам из любой точки приложения.
_____________
Блог |
VK |
GitHub |
Twitch
AlmazDelDiablo, а можно простенький пример, а то тут не совсем понятно. покажи как ты используешь static на примере двух классов, и чтобы можно было наглядно видеть преимущества- что это действительно здесь необходимо?
AlmazDelDiablo
16.08.2012 - 15:37
Упрощенный вариант:
<?php
error_reporting(E_ALL);
$c = new Controller();
$c->run();
class Register {
static private $objects = array();
static public function get( $name ) {
return self::$objects[$name];
}
static public function add( $name, $object ) {
self::$objects[$name] = $object;
}
}
class Controller {
public function run() {
require_once PATH .'classes/module.class.php';
Register::add( 'Module', new Module() );
}
}
class Frame {
public function initModule() {
Register::get('Module')->init();
}
}
?>
Приминений для статических методов и свойств огромное множество. Всё их удобство — это доступ из любой части сайта без создания объекта.
_____________
Блог |
VK |
GitHub |
Twitch