Статичиеские методы и свойства, Singleton - разъясните

Духовность™

Продвинутый новичок
Статичиеские методы и свойства, Singleton - разъясните

Привет.

Вот код:

PHP:
class Singleton
{
    private static $instance = null;

    private static $str;

    private function __construct() {}

    private function init()
    {
        self::$str = 'привет!';
    }

    public static function getInstance()
    {
        if (null === self::$instance)
		{
            self::$instance = new self;
            self::init();
        }
        
        return self::$instance;
    }

	public function getStr()
	{
		return self::$str;
	}
}

$a = Singleton::getInstance();

print_r($a); // объект пуст? 

echo $a->getStr(); // выводит "привет!"
Объясните пожалуйста, почему print_r выводит пустой объект? Почему в выводе нет упоминания о переменной $str?
 

zuzmic

Новичок
а что должен выводить ?

у тебя же нет никаких полей у объекта, вот он и пустой
 

fixxxer

К.О.
Партнер клуба
грубо говоря статическая переменная принадлежит классу, а не объекту.
 

Духовность™

Продвинутый новичок
fixxxer
это понятно...

мне не понятно, почему я не могу с помощью стандартных средств PHP сделать отпечаток класса.

упростил пример:
PHP:
class a
{
	public static $a;
	
	public function __construct()
	{
		self::$a = 'ляля!';
	}
}

$a = new a();

print_r($a);
Выводит:
Код:
a Object
(
)
по-моему, это очень неудобно для отладки. Получается, теперь, что бы посмотреть статические свойства класса, мне нужно лезть непосредственно в PHP-код, вместо элементарного print_r

:(
 

Alexandre

PHPПенсионер
не не понятно, почему я не могу с помощью стандартных средств PHP сделать отпечаток класса.
потому-что это статическая переменная, соответственно к ней надо бращаться как к статике: print_r( a::a );
 

whirlwind

TDD infected, paranoid
Это хорошо, что неудобно для отладки, хоть одним статическим классом/атрибутом меньше. Пусть будет хотя бы так, если трудно просто поверить, что статические элементы - это зло.
 

Ярослав

Новичок
Автор оригинала: whirlwind
Это хорошо, что неудобно для отладки, хоть одним статическим классом/атрибутом меньше. Пусть будет хотя бы так, если трудно просто поверить, что статические элементы - это зло.
Можно наглядный пример?
 

berkut

Новичок
зло - патамушта с tdd плохо дружат статики. у каждого свои заё...ы
 

korchasa

LIMB infected
Автор оригинала: Alexandre
но почему же зло?
Потому же почему и наследование хуже делегирования - статическая зависимость от имени класса. Хотя насчет "зло" это вряд ли ;)
 

whirlwind

TDD infected, paranoid
Можно наглядный пример?
Наглядный пример чего? Как вы мучаетесь в попытках отвязать классы от, пусть даже и единственного сингельтона на этапе рефакторинга, вместо того, что бы изначально применить injection, облегчить тестирование, сопровождение? Или пример плохих слов, которыми обычно покрывают горе-программеров привязавших полпроекта к одному сингельтону и тем самым склеив компоненты неразрывно?

Слишком долго объяснять и показывать. Это приходит с опытом. В ООП статика = зло.
 

kode

never knows best
Re: Статичиеские методы и свойства, Singleton - разъясните

Автор оригинала: triumvirat
Привет.

Вот код:

PHP:
class Singleton
{
    private static $instance = null;

    private static $str;

    private function __construct() {}

    private function init()
    {
        self::$str = 'привет!';
    }

    public static function getInstance()
    {
        if (null == self::$instance){
////////////////////////////////
$class = __CLASS__;
self::$instance = new $class();
///////////////////////////////
            self::init();
        }
        
        return self::$instance;
    }

	public function getStr()
	{
		return self::$str;
	}
}

$a = Singleton::getInstance();

print_r($a); // объект пуст? 

echo $a->getStr(); // выводит "привет!"
Объясните пожалуйста, почему print_r выводит пустой объект? Почему в выводе нет упоминания о переменной $str?
 
Сверху