Доступ к статичным переменным.

  • Автор темы Автор темы Solid
  • Дата начала Дата начала
да убери ты этот set

вот смотри.
есть у тебя объект класса A. что у него самое важное? его интерфейс. То есть то, через что он общается с внешним миром. В идеале - набор методов. с помощью которых ты можешь изменить его внутреннее состояние - значения свойств.

А что делает твой set()? он у тебя public. он даёт всем другим классам возможность наставить каких-то непонятных свойств объекту класса A, то есть нарушить его инкапсуляцию
 
Автор оригинала: Sam
да убери ты этот set

вот смотри.
есть у тебя объект класса A. что у него самое важное? его интерфейс. То есть то, через что он общается с внешним миром. В идеале - набор методов. с помощью которых ты можешь изменить его внутреннее состояние - значения свойств.

А что делает твой set()? он у тебя public. он даёт всем другим классам возможность наставить каких-то непонятных свойств объекту класса A, то есть нарушить его инкапсуляцию
Я, конечно, понимаю, что очень часто private и protected очень нужны, без них порой необойтись... но в данном случае мне не требуеться ничего закрывать... В общем, видимо прийдёться решать такую задачу через ссылки.

-~{}~ 15.03.06 04:41:

Автор оригинала: Andreika
угу.. тока тема статических переменных не раскрыта
и вообще зачем так хитро все было придумано?
Для облегчения жития. :)

Очень простое расширение функций... простое разделение логики и представления.
 
инкапсуляция, разделение логики и представления... чет вас с утра колбасит

ну и как, сильно облегчил себе жизнь? судя по теме - очень
 
Andreika
это у тебя "с утра"
а у меня - ночь. вот и колбасит )
 
Угу. Разобрался. :)

Теперь всё будет намного легче, правда решение мне не очень нравиться.. но всётаки лучше, чем то, что я использовал раньше.

Знаете, я удивлён такому коду:
PHP:
class A {
	function A(&$a) {
		$this->a = $a;
	}
	
	function get() {
		echo $this->a;
	}
}
$z = 2;
$a = new A($z);
$a->get();

-~{}~ 15.03.06 04:49:

Автор оригинала: itprog
Solid
разделение логики и представления?!?! В каком месте?
Ой, да тут большой код... Он не совсем к месту...
У меня спросили для чего - я ответил. Вот и всё.
 
Автор оригинала: Sam
я тоже удивлён таким кодом )
Подкалываешь!? :D
Я гАвАрю по-русски.

Насамом деле же должна быть ошибка. Ведь свойства $a в самом классе то нет. Значит класс сам создаёт себе свойство.
 
Solid
да вроде спрашивали зачем , а не для чего :)

От статики надо избавляться
 
В общем решил через передачу ссылки на $this в другой класс. Иначе вроде даже и невозможно.

-~{}~ 15.03.06 04:56:

Автор оригинала: itprog
Solid
да вроде спрашивали зачем , а не для чего :)

От статики надо избавляться
А если она требуется? Как от неё избавиться в таком случае?
 
если она требуется - от неё избавляться не надо
но это не тот случай
 
Solid
переписать всё, конечно есть случаи когда без статики никак (тот же синглетон), но тут не такой случай...
 
Ладно, замнём тему... А то уже потихоньку начинается flame.

-~{}~ 15.03.06 05:33:

Снова проблема. Не понимаю...
PHP5 - всё ок, в PHP4 - не работает.
PHP:
class A {
	var $id = 'default';

	function A() {
		$this->id = 'constructor';
	}

	function cout() {
		echo $this->id;
	}

	function runB() {
		$a = new B($this);
		$a->set();
	}
	
	function set($var) {
		$this->id = $var;
	}
}

class B {
	var $core;
	function B(&$core) {
		$this->core = $core;
	}

	function set() {
		$this->core->id = 'setted1';
		//$this->core->set('setted2');
	}
}

$a = new A();
$a->runB();
$a->cout();
 
Сверху