свойства и методы объекта

Inferno

Новичок
свойства и методы объекта

есть такой код:
PHP:
<?php  	  	
class Query  	
{  		
private $a = 'a';  		
private $func;  		  		
function __construct()  
{  
$this->func = array('a' => $this->aq());  			
$this->change();  			
$this->write();  		
}
 private function aq() { return $this->a; }  		  		
private function change()  { $this->a = 'asd';	}  		  		
function write()  { echo $this->func['a']; }  	
}    
?>
вот уже битый час ломаю голову почему он не изменяет свойство $this->a и выводит неизмененное значение???
 

Inferno

Новичок
var_dump убрал по идееи не нужен, но класс должен изменить значение свойства $this->a из 'a' на 'asd' но не происходит этого...
 

LeoKee

Новичок
Потому что вы делаете это в конструкторе... И не факт, что инициализация private $a = 'a'; выполнится ДО вашего присваивания в методе change
 

Inferno

Новичок
PHP:
<?php
	
	class Query
	{
		private $a = 'a';
		private $func;
		
		function __construct()
		{
			$this->func = array('123' => $this->aq());
			$this->change();
			//$this->write();
		}
		
		private function aq()
		{ return $this->a; }
		
		public function change()
		{ $this->a = 'asd';	}
		
		public function write()
		{ echo $this->func['123']; }
	}

?>
теперь из другого *.php вызываем
PHP:
   $q = new Query;
	$q->change();
	$q->write();
все равно, ну только теперь вообще не выводит ничего...
 

Inferno

Новичок
на самом деле все по старому (((
ну ответил как бы в теории, да может не успеватьвызываться еще не созданные методы..., но после изменения все осталось на своиз местах
 

LeoKee

Новичок
Методы тут не причем, пхп не гарантирует очередности выполнения инициализации объекта класса и конструктора
 

Inferno

Новичок
ладно, согласен, Curly-fingers C_TIGER спасибо сразу не допедрил...
тогда как добиться правильной работы без полного изменения концепции кода...?

как я понял при создании массива (значение - функция) то в качестве функции подставляется не указатель для вызова функции а ее результат

есть ли возможность подставлять функцию динамически? стоит думать в сторону array_map ?
 

dimagolov

Новичок
Inferno, ты хочешь странного. это не C++ и даже не JS, чтобы ссылки на ф-ии сохранять. Разные реализации одного и того же метода достигаются или наследованием или интерфейсом.
 

Inferno

Новичок
при объявлении элемента массива как функции, приводит к ее вызову, есть ли возможность объявлять такие переменные-массивы так, что бы вызов функции происходил лишь в момент использования элемента этого массива???
 

LeoKee

Новичок
zerkms

PHP:
<?php
class a_class {
	public $a = 1; // нет гарантии, что тут присваивание выполнится до отработки конструктора с $this->a = 2;
	// в некоторых случаях бывает наоборот
	
	public function __construct() {
		$this->a = 2;
	}
}
?>
не помню статью , но помоему это возникает, когда в конструкторе используются методы из этого же класса... чтото там про циклическую ссылочность
 

Inferno

Новичок
Автор оригинала: Inferno
при объявлении элемента массива как функции, приводит к ее вызову, есть ли возможность объявлять такие переменные-массивы так, что бы вызов функции происходил лишь в момент использования элемента этого массива???
лучше об этом поспорте )
 

dimagolov

Новичок
Inferno, тебе уже сказали, что ты ерунду придумал. ты расскажи лучше зачем тебе такой изврат понадобился, что ты хочешь реализовать в итоге?
 

Inferno

Новичок
шаблонизатор и движок для своего сайта...
просто реализовывать его стал может через *опу
в общем берется шаблон страница и
PHP:
foreach($this->func as $match)
$ss = preg_replace($match['name'], $match['fun'], $ss);
где
PHP:
$this->func
это наш
PHP:
$this->func[] = array('name' => '/#LESSONS#/', 'fun' => $this->lessons());
в котором каждое правило замены является элементом в котором есть имя правила и функция которая производит замену....
буду рад выслушать что мал, юнн, глуп и все в этом духе, можно еще и подсказать как правильно
 
Сверху