Задать вопрос
Ninazu
@Ninazu

Как реализовать заполнение статических свойств в наследуемых классах из родительского?

Что-то я запутался со static. Точнее с тем как с его помощью можно сделать синглтон.

<?php

/** Описание обьекта B */
class B extends Base {}

/** Описание обьекта А */
class A extends Base {}


class Base {

	public static $comment;
	
	public static $name;
	
	public function __construct(){
		//Нет смысла выполнять этот код для каждого экземпляра класса
		//так как комментарий и имя статичны для класса
		
		//if(is_null(static::$name)){
			$reflect = new ReflectionClass(static::class);
			static::$comment = $reflect->getDocComment();
			static::$name = $reflect->getShortName();
			echo "<br>Получение Reflect данных для класса ".static::$name;
		//}
	}
}


echo "<pre>";

for($i=0;$i<3;$i++){
	$list = [];
	
	foreach(['A','B'] as $className){
		$class = new $className();
		$list[$class::$name] = $class::$comment;
	}
	
	echo "<br>";
	print_r($list);
	echo "<hr>";
}

PHP Fiddle

Как видно из кода, нет смысла инициализировать статические свойства для каждого обьекта, они должны быть инициализированы один раз для каждого класса
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
class Foo{

    public static function changeTest()
    {
	static::$test = '321';
    }
}

class Bar extends Foo
{
	public static $test = 123;
}

var_dump(Bar::$test);
Bar::changeTest();
var_dump(Bar::$test);


Но это очень плохой подход. Родительский класс вообще ничего не должен знать про дочерний
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы