[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задания на собеседовании
Страницы: 1, 2, 3, 4
volter9
Ну, поправил:

Class Foo {

private $baz;
public function __construct()
{
$this->baz = 'Hello';
}

public function updateBaz(Foo $foo){
$foo->baz .= ' world';
}

public function getBaz(){
return $this->baz;
}
}


$first = new Foo();
$second = new Foo();
$first->updateBaz($second);
echo $second->getBaz();


Выводит "Hello world", только я не понял, в чем подвох задачки?

_____________
Мой блог
Invis1ble
Нет никакого подвоха. Просто демонстрация возможности работы с приватными свойствами объектов того же типа.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Hello
volter9

private $baz;

public function updateBaz(Foo $foo){
$foo->baz .= ' world';
}


т.е. тебя не смущает что идет обращение к приватному свойству, как к публичному?

_____________
VPS от 5$, первые 2 месяца - бесплатно.
volter9
Цитата (Hello @ 16.12.2014 - 13:40)
volter9

  private $baz;

  public function updateBaz(Foo $foo){
      $foo->baz .= ' world';
  }


т.е. тебя не смущает что идет обращение к приватному свойству, как к публичному?

Простите за мою невнимательность, я вот этого не заметил... Спасибо что подметили.

Тоже самое можно сделать через Reflection:

class A {
private $b = '';

public function getB () {
return $this->b;
}
}


$reflection = new ReflectionClass('A');
$property = $reflection->getProperty('b');
$property->setAccessible(true);

$a = new A;
$property->setValue($a, 'c');

echo $a->getB();


Но все таки пример bestxp намного интереснее чем через Reflection :)

_____________
Мой блог
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.