Конструктор выполняется дважды!

flash-boss

Новичок
Конструктор выполняется дважды!

есть файл index.php, в нём прописан класс class1 с конструктором.
есть файл second.php, в нём также прописан класс class2 с конструктором.

Подключается второй файл-класс из первого файла-класса в конструкторе

PHP:
index.php

class class1 {

public $ip;

public function __construct()
{
 require_once('second.php');
 $this->ip = $_SERVER['REMOTE_ADDR'];
}

}

second.php


class class2 extends class1 {

public function __construct()
{
 echo $this->ip;//не работает...
 parent::__construct();
 echo $this->ip;//работает...
}

}
Вопрос: почему, когда подключается второй класс, наслдующий первый, он (второй класс) не может использовать параметры первого класса без перезагрузки первого класса? Возможно ли, чтобы параметры могли быть доступны без вторичной загрузки?
 

svetasmirnova

маленький монстрик
А что значит "не работает..." здесь:
>echo $this->ip;//не работает...
?
 

_RVK_

Новичок
flash-boss

Ты перегрузил конструктор родителя в потомке. Теперь он другой, и тот код, что был конструкторе родителя не выполнится. Выход - явно вызывать конструктор родителя, что ты и сделал. Странного в этом ничего нет. Та же ситуация и для любых других методов класса.
 

flash-boss

Новичок
Значит некоторые операторы будут выполняться дважды....!?

-~{}~ 07.12.05 16:19:

Автор оригинала: svetasmirnova
А что значит "не работает..." здесь:
>echo $this->ip;//не работает...
?
Это значит, что параметр ip не определён в классе-потомке...
 
flash-boss
да, если ты их вызовешь... как в твоем примере...
PHP:
class class2 extends class1 { 

public function __construct() 
{ 
 echo $this->ip;
 parent::__construct();  // вот второй вызов конструктора...
 echo $this->ip;
} 

}
 

_RVK_

Новичок
>Значит некоторые операторы будут выполняться дважды....!?

Что ты имеешь ввиду?

>Это значит, что параметр ip не определён в классе-потомке...

Опять же не понятны причины твоего вывода.
Он определен в родителе и унаследован потомком.
 

svetasmirnova

маленький монстрик
flash-boss, _RVK_
Он в момент вызова echo $this->ip; в потомке в родителе-то определён или продекларирован только?
 
svetasmirnova
Получается, что только продекларирован, т.к. еще не вызван конструктор базового класса...
 

flash-boss

Новичок
Автор оригинала: svetasmirnova
flash-boss, _RVK_
Он в момент вызова echo $this->ip; в потомке в родителе-то определён или продекларирован только?
определён

Что ты имеешь ввиду
если в конструкторе родителя выполнять разные операции, то они повторяться дважды (p.s. проверял...)
 

_RVK_

Новичок
flash-boss
мне кажется у тебя каша в голове. пример можно?
 

flash-boss

Новичок
PHP:
class c1 
{ 
 public $ip; 

 public function __construct() 
 { 
   $this->ip = '347';//определяем ip 
 } 
} 

$t = new c1; 
require('class_2.php'); 

------------------

$idx = new c2; 
class c2 extends c1 
{ 
	public function __construct()
	{
		echo $this->ip;//not working--->Надо сделать чтобы работало здесь  
		parent::__construct(); 
		echo $this->ip;//working ;
	}
 
}
 

_RVK_

Новичок
flash-boss

Во-первых убери этот код, ты нарушаешь правила форума
Во-вторых напиши короткий пример демонстрирующий проблемму
 
flash-boss
не нужно таких ужасных примеров :(

вот
a.php
PHP:
<?php
class a {

    function __construct()
    {
        require_once 'b.php';       
        echo 'a';
    }
}

$a = new a;
?>
b.php
PHP:
<?php
class b extends a {

    function __construct() 
    {
        echo 'b';
    }

}
?>
 

_RVK_

Новичок
что за бред делать инклюды в конструкторе родителя?

-~{}~ 07.12.05 16:46:

Loshadka
, давай ты не будешь встревать, и позволишь автору внятно изложить свою проблему. ок?
 

flash-boss

Новичок
Автор оригинала: _RVK_
что за бред делать инклюды в конструкторе родителя?
Во-первых, это пример.
Во-вторых, я рассматриваю ситуацию конкретно на этом примере.....
 

_RVK_

Новичок
flash-boss
Если ты не хочешь что бы тебе помогли, и хочешь что бы эту тему закрыли, пожалуйста, продолжай.

-~{}~ 07.12.05 17:09:

flash-boss

И что демонстрирует твой код? Поясни плиз, гду ты видишь проблемму?
 

_RVK_

Новичок
А что значит "работало"? Что ты хочешь что бы там происходило?
 
Сверху