Jump to content
  • 0

PHP классы


youmay
 Share

Question

День добрый. Объясните пожалуйста, а лучше дайте ссылку почитать, можно и на инглише, почему в результате выведется 1

class a {

public $r=1;

public function save() {
$this->r = 2;
}

}

class b extends a {

public function view() {
echo $this->r;
}

}

$a = new a();
$b = new b();

$a->save();
$b->view();

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Потому что $a->save меняет переменную r внутри $a

$b->view смотрит переменную r внутри $b, это две разных переменных

Спасибо. Доходчиво и понятно. А можно ли при изменении r внутри $a чтобы она изменялась и внутри $b? Что то типа ссылки &$r оформить ее в $b

Link to comment
Share on other sites

  • 0

Вы создаете два экземпляра двух разных классов (то что второй унаследован от первого не значит что он знает что происходит в другой копии объекта). Вы же не вызывали метод save в экземпляре $b потому свойство $r и не изменилось на 2.

Если бы у вас были ссылки на один объект был бы другой разговор, но у вас две разные копии двух разных классов.

Edited by wwt
  • Like 1
Link to comment
Share on other sites

  • 0

А можно ли при изменении r внутри $a чтобы она изменялась и внутри $b? Что то типа ссылки &$r оформить ее в $b

Можно передать ссылку на свойство чтото типо:


$b = new b(&$a->r);

а в конструкторе класса b как то так:


class b extends a {
function b($p){
$this->r = &$p;
}
public function view() {

echo $this->r;
}

}

Тогда свойство r класса b будет ссылкой на свойство r класса a.

PS Но не нужно забывать что если вы измените r в b то оно изменится и в a и наоборот ))

Edited by wwt
Link to comment
Share on other sites

  • 0

Нашел еще вот такой способ. Не знаю правда, какие он таит подводные камни.

class a {

public static $r=1;

public function save() {
static::$r = 2;
}

}

class b extends a {

public function view() {
echo static::$r;
}

}

$a = new a();
$b = new b();

$a->save();
$b->view();

Вот материалы, кажется по этой теме нашел Позднее статическое связывание, кому интересно.

Link to comment
Share on other sites

  • 0

Нашел еще вот такой способ. Не знаю правда, какие он таит подводные камни.

class a {

public static $r=1;

public function save() {
static::$r = 2;
}

}

class b extends a {

public function view() {
echo static::$r;
}

}

$a = new a();
$b = new b();

$a->save();
$b->view();

Что-то я сомневаюсь что этот код у вас работает.

UPD все ясно это уже PHP 5.3.0 там много чего нового в ООП.

Edited by wwt
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy