<?php
class MyClass {
public $myVar;
function __constructor() {
$this -> myVar = 5;
}
}
$a = new MyClass;
echo $a -> myVar;
?>
5
0
Ничего не выведет
Выведет ошибку
Пояснение: В PHP5 название конструктора "__construct", но это не мешает объявить свой метод "__constructor".
<?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";
$var4 = clone($var2);
function __clone() {
$var5 =& $var4->var;
$var3 = $var1;
$var1 = new B();
<?php class One { public $param = 5; protected function __construct() { $this->param = 10; } public static function getInstance() { return new One(); } }
Какие верные варианты его использования и что выведется на экран?
$asdf = new One(); echo $asdf->param;
Выведется 5
$asdf = new One(); echo $asdf->param;
Выведется 10
$asdf = One::getInstance(); echo $asdf->param;
Выведется 10
$asdf = One::getInstance(); echo $asdf->param;
Выведется 5
Все вышеперечисленные варианты приведут к ошибке
Пояснение: Если конструктор класса защищен, то создание объекта данного класса приведет к ошибке.
__wakeup()
__construct()
__set_state()
__set()
__call()
interface iSingleton { public static function getInstance(); } class singleton implements iSingleton { private static $instance = false; final public static function getInstance() { return (self::$instance) ? self::$instance : self::$instance = new self; } private function __construct(){} private function __clone(){} function f1(){ echo 'Singleton::f1()'; } } class cl1 extends singleton{ function f1(){ echo 'cl1::f1()'; } } class cl2 extends singleton{ function f1(){ echo 'cl2::f1()'; } } cl1::getInstance()->f1(); cl2::getInstance()->f1();
Notice
cl1::f1()cl2::f1()
Singleton::f1()Singleton::f1()
cl1::f1()cl1::f1()
Fatal Error
cl2::f1()cl2::f1()
Пояснение: Позднее статическое связывание в паттерне "Одиночка" через перенаправленный вызов self. self использует класс, к которому она принадлежит, в данном случае это class singleton. getInstance() всегда возвращает единственный и тот же самый экземпляр объекта. Первым была вызвана инициализация объекта cl1, все последующие инициализации будут возвращать первый инициализированный объект
interface iSingleton { public static function getInstance(); } class singleton implements iSingleton { private static $instance = false; final public static function getInstance() { return (self::$instance) ? self::$instance : self::$instance = new static; } private function __construct(){} private function __clone(){} function f1(){ echo 'Singleton::f1()'; } } class cl1 extends singleton{ function f1(){ echo 'cl1::f1()'; } } class cl2 extends singleton{ function f1(){ echo 'cl2::f1()'; } } cl1::getInstance()->f1(); cl2::getInstance()->f1();
cl1::f1()cl2::f1()
cl2::f1()cl2::f1()
Fatal Error
Singleton::f1()Singleton::f1()
Notice
cl1::f1()cl1::f1()
Пояснение: Позднее статическое связывание в паттерне "Одиночка" через перенаправленный вызов static. getInstance() всегда возвращает единственный и тот же самый экземпляр объекта. Первым была вызвана инициализация объекта cl1, все последующие инициализации будут возвращать первый инициализированный объект.
<?php class People { public function greeting() { echo "A nice smile for you. "; } } trait MyParents { public function greeting() { parent::greeting(); $this->greeting2(); echo "A big hug for you. "; } } class MyMom extends People { use MyParents; public function greeting2() { echo "A big kiss for you. "; } } class MyDad extends People { use MyParents; public function greeting2() { echo "A strong handshake for you. "; } } $person = new MyMom(); $person->greeting(); ?>
A big kiss for you. A big hug for you. A strong handshake for you.
A nice smile for you. A big hug for you. A strong handshake for you.
A nice smile for you. A big kiss for you. A big hug for you.
A nice smile for you. A big hug for you. A strong handshake for you.
A strong handshake for you. A big hug for you.
Интерфейс не может содержать реализации
Абстрактный класс не может содержать реализации
Класс, реализующий интерфейс, обязан предоставить имплементацию всех методов этого интерфейса
Ничем не отличаются
Ваш ответ:
Правильные ответы: instanceof,INSTANCEOF,instanceOf
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 foo { private $value = 42; public function &getValue() { return $this->value; } public function echoValue(){ echo $this->value; } } $obj = new foo; $myValue = $obj->getValue(); $myValue = 33; $obj->echoValue(); ?>
Сообщение об ошибке
33
42
0
Пояснение: http://www.php.net/manual/en/language.references.return.php
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
Использую перегрузку функций
Определю прототипы функций
Определю пространства имён
Использую сборщик мусора в памяти
Использую контроль типов
Абстрактный класс не может иметь не абстрактные методы
final класс не может иметь final методов
Абстрактный класс не может иметь final методов
final класс не может иметь абстрактных методов
<?php abstract class cOlolo{ static function dontDoIt(){ print "wow"; } abstract function doIt(); } cOlolo::dontDoIt(); ?>
Сообщение об ошибке
wow + предупреждение
wow