Тест "ООП в PHP 5"

Общие вопросы
Чтобы определить программный код, который будет выполняться каждый раз, когда создается новый экземпляр класса, вы добавите код внутри какого магического метода?
  • __wakeup()

  • __construct()

  • __set_state()

  • __set()

  • __call()

Общие вопросы
Укажите все не верные утверждения относительно абстрактных классов в php5?
  • Абстрактные классы введены начиная с php5

  • Класс хотя бы с одним абстрактным методом должен быть объявлен как абстрактный

  • Абстрактный класс может содержать не абстрактные методы

  • Определение абстрактного метода может содержать тело метода

Общие вопросы
Вам необходимо установить следующие области видимости для атрибутов класса: 
1) Везде
2) Потомки, предки, и текущий класс;
3) Только текущий класс

Какие ключевые слова нужно использовать в каждом из этих трёх случаев?
  • 1) private
    2) public
    3) protected

  • 1) private
    2) protected
    3) public

  • 1) public
    2) private
    3) protected

  • 1) public
    2) protected
    3) private

  • 1) protected
    2) private
    3) public

Нюансы ООП в PHP
Что будет на экране в результате выполнения данного кода?
class A {         private $var1;         public function __construct($var1) {                 $this->var1=$var1;         }         public function method1() {                 $a = new A(5);                 echo $a->var1;         }  }  $cl = new A(10); $cl->method1(); 
  • 10

  • 5

  • Ничего

  • Сообщение о фатальной ошибке

  • Сообщение о том, что поле неопределенно

Пояснение: Объекты одного типа имеют доступ к приватным членам, даже если это разные екземпляры. Так как, реализация объектов уже известна внутри этих объектов http://php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects

Нюансы ООП в PHP
Что выведет данный скрипт в результате своей работы?
<? class MyClass {     public $myVar;     function __constructor() {         $this -> myVar = 5;     } }  $a = new MyClass; echo $a -> myVar; ?> 
  • 5

  • 0

  • Ничего не выведет

  • Выведет ошибку

Пояснение: В PHP5 название конструктора "__construct", но это не мешает объявить свой метод "__constructor".

Нюансы ООП в PHP
Что будет напечатано?
<? class test{     public $ab = 10;     function __construct($a){         $this->ab = $a;         }     function __construct($a,$b){         $this->ab = $a+$b;         } } $c = new test(20,10); echo $c->ab; ?> 
  • 10

  • 20

  • 30

  • Ошибка

Пояснение: В PHP не может быть два конструктора

Нюансы ООП в PHP
Какой результат выполнения следующего кода?
<?php class c{     private $a = 42;     function &a(){         return $this->a;     }     function print_a(){         echo $this->a;     } } $c = new c; $d = &$c->a(); echo $d$d = 2$c->print_a(); ?> 
  • 422

  • 4242

  • код вызовет ошибку

Пояснение: &a() возвращает ссылку на $a поэтому $d = &$a, потом присваивается $a = 2 и print_a() его и возвращает. $d = 2; это и будет $a = 2 после того как $d присвоилась ссылка на $a

Общие вопросы
При сравнении объектов класса, каким образом операторы == и === отличаются между собой?
  • == равны, если только тот же класс.
    === равны, если тот же экземпляр.

  • == должен быть тот же экземпляр.
    === те же самые свойства.

  • == равны, если тот же класс, свойства и значения.
    === равны, если тот же экземпляр и свойства.

  • == равны, если тот же самый класс, свойства и значения.
    === равны, если тот же самый экземпляр.

  • == равны, если те же самые свойства и значения.
    === равны, если тот же самый экземпляр и свойства.

Общие вопросы
Что из следующих утверждений верно относительно ключевых слов final и abstract?
  • Абстрактный класс не может иметь не абстрактные методы

  • final класс не может иметь абстрактных методов

  • Абстрактный класс не может иметь final методов

  • final класс не может иметь final методов

Практические вопросы
Что выведет на страницу код?
<?php abstract class cOlolo{     static function dontDoIt(){         print "wow";     }     abstract function doIt(); }  cOlolo::dontDoIt(); ?> 
  • Сообщение об ошибке

  • wow + предупреждение

  • wow

Нюансы ООП в PHP
Что напечатает следующий код:
<?php  class Clazz {     public $value; }  $b = new Clazz; $b->newValue = 1;  $a = $b$a->newValue = 2;  echo $b->newValue;  
  • Ничего не напечатает

  • 2

  • Ошибка, так как newValue не определена

  • 1

Нюансы ООП в PHP
Данный код выведет ошибку. В какой строке?
<?php abstract class B {  public $var = "B";   function __construct(){   $this->var = "B";  }  }  class E extends B {  public $var = "E";   function __construct() {   $this->var = "E";  }   function __clone() {   $this->var = "C";  } }  $var1 = new B(); $var2 = new E(); $var3 = $var1$var4 = clone($var2); $var5 =& $var4->var$var2->var = "V";  
  • function __clone() {

  • $var5 =& $var4->var;

  • $var1 = new B();

  • $var3 = $var1;

  • $var4 = clone($var2);

Практические вопросы
Что выведет следующий код?
<?php class Base {       function func() {      echo " Base";    }       function parent() {       echo " None";    } }  class Extended extends Base {       function Func() {      echo " Extended";    }       function Parent() {     echo parent::func();    } }  class Extended2 extends Extended {     function func() {      echo " Extended2";    }     function parent() {      echo parent::Func();    }     function grandpa() {      echo parent::parent();    } }  $var1 = new Base();  $var2 = new Extended();  $var3 = new Extended2();   $var1->func();  $var2->func();  $var3->func();  $var2->parent();  $var3->parent();  $var3->grandpa();
  • Base Extended Extended2 Base Extended Base

  • Base Base Extended2 None Extended None

  • Base Base Extended2 None Extended Base

  • Base Base Extended2 Base Extended Base

  • Base Extended Extended2 Base Extended None

Практические вопросы
Дан следующий скрипт:
class newClass {     public $one = 'one';     private $two = 'two';     function two()     {         return 'three';     } } $obj = new newClass(); foreach ($obj as $v) {     echo $v; } 
Что выведется по окончанию работы скрипта?
  • Ничего не выведется

  • one

  • two

  • three

  • onetwo

  • Возникнет ошибка выполнения скрипта

Общие вопросы
Какие из утверждений являются верными относительно интерфейсов (PHP 5.4+)?
  • Интерфейс может расширять несколько интерфейсов

  • Класс может реализовывать несколько интерфейсов

  • Абстрактный класс может реализовывать несколько интерфейсов

  • Методы с одинаковыми именами и сигнатурами могут существовать в нескольких интерфейсах, которые реализует данный класс