Духовность™
Продвинутый новичок
berkut
это ты про что???
это ты про что???
статическая зависимость от имени класса.
В вызове, а не в определении:Автор оригинала: berkut
енто как
private static $varl;
завязан на имени класса
потому-что private static $str; переменная статическая.print_r($a); // объект пуст?
echo $a->getStr(); // выводит "привет!"
Объясните пожалуйста, почему print_r выводит пустой объект? Почему в выводе нет упоминания о переменной $str?
что значить статическая зависимость от имени класса?Потому же почему и наследование хуже делегирования - статическая зависимость от имени класса.
а чем твой вариант отличается?Автор оригинала: kode
хех, я открыл закладку когда было только одно сообщение
Ну если мы пишемАвтор оригинала: Alexandre
что значить статическая зависимость от имени класса?
больше года использую синглетоны (но не злоупотребляю) и ни разу не жаловался.
new Foo;
Foo::$a;
Foo::b();
Каюсь не заметил private. Зависимость в данном случае не свойстве, а в вызове метода getInstance(), но меньше она от этого не становится. Поэтому и рекомендуется иметь в системе только один синглтон, чтобы свести количество зависимостей к минимуму.Автор оригинала: berkut
korchasa
а ничо шо
private static $bar;
Foo::$bar;
енто fatal error?
чем плохо:Поэтому и рекомендуется иметь в системе только один синглтон, чтобы свести количество зависимостей к минимуму.
ну ведь ты же это делаешь где-ниубудь в методе, правильно? а если бы ты передал оба объекта через аргументы, уже гибче получилось получилось бы. А если бы ты еще передал через аргумент один единственный тулкит, в котором были бы все самые нужные объекты, то еще лучше...$db = DB::getInstance();
$sess = SESSIONS::getInstance();
А если у нас два соединения с базой?Автор оригинала: Alexandre
чем плохо:
$db = DB::getInstance();
$sess = SESSIONS::getInstance();
какая может быть зависимость, если у нас два разных класса: DB и SESSIONS?
А если бы ты еще передал через аргумент один единственный тулкит, в котором были бы все самые нужные объекты...
Это ведь тоже самое что использовать глобалы.
весомый агументSluggard
ты не понял.
меня не разведешь =)весомый агумент
если это один раз, на худой случай пять, то может быть и лучше.ну ведь ты же это делаешь где-ниубудь в методе, правильно? а если бы ты передал оба объекта через аргументы, уже гибче получилось получилось бы. А если бы ты еще передал через аргумент один единственный тулкит, в котором были бы все самые нужные объекты, то еще лучше...
а вот если два соединения с базой, то тут другой подход,А если у нас два соединения с базой?
$db->open(....); // дефолтная коннекция
$cn1 = $db->open(....); // коннекция 1
$cn2 = $db->open(....); // коннекция 2
$db->query( $query, $cn1 ); // для коннекции 1
$db->query( $query ); // дефолтно для 0 (первая коннеция)
$db->query( $query , $cn2 ); // для коннекции 2
а так, если тяну туулкит через пять классов - я не получаю зависимость?А если серъезно. Когда вы получаете свои сессии и коннекты описанным Alexandre способом, вы прям там, в своем методе, зашиваете зависимость на конкретные классы.
PSR_Services::getInstance()->register('session', new SESSIONS); //было
PSR_Services::getInstance()->register('session', new ADVANCED_SESSIONS); //стало
public function servicesUsageExample($services){
list($session, $logger)=$services->find('session', 'logger');
...
}
а если таскать какой-то тулкит, то какая разница? на примере можно?Когда вы получаете свои сессии и коннекты описанным Alexandre способом, вы прям там, в своем методе, зашиваете зависимость на конкретные классы