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

Sam

Новичок
да убери ты этот set

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

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

Solid

Drosera anglica
Автор оригинала: Sam
да убери ты этот set

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

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

-~{}~ 15.03.06 04:41:

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

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

Andreika

"PHP for nubies" reader
инкапсуляция, разделение логики и представления... чет вас с утра колбасит

ну и как, сильно облегчил себе жизнь? судя по теме - очень
 

Sam

Новичок
Andreika
это у тебя "с утра"
а у меня - ночь. вот и колбасит )
 

Solid

Drosera anglica
Угу. Разобрался. :)

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

Знаете, я удивлён такому коду:
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
разделение логики и представления?!?! В каком месте?
Ой, да тут большой код... Он не совсем к месту...
У меня спросили для чего - я ответил. Вот и всё.
 

Solid

Drosera anglica
Автор оригинала: Sam
я тоже удивлён таким кодом )
Подкалываешь!? :D
Я гАвАрю по-русски.

Насамом деле же должна быть ошибка. Ведь свойства $a в самом классе то нет. Значит класс сам создаёт себе свойство.
 

itprog

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

От статики надо избавляться
 

Solid

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

-~{}~ 15.03.06 04:56:

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

От статики надо избавляться
А если она требуется? Как от неё избавиться в таком случае?
 

Sam

Новичок
если она требуется - от неё избавляться не надо
но это не тот случай
 

itprog

Cruftsman
Solid
переписать всё, конечно есть случаи когда без статики никак (тот же синглетон), но тут не такой случай...
 

Solid

Drosera anglica
Ладно, замнём тему... А то уже потихоньку начинается 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();
 
Сверху