== равны, если только тот же класс.
=== равны, если тот же экземпляр.
== должен быть тот же экземпляр.
=== те же самые свойства.
== равны, если тот же класс, свойства и значения.
=== равны, если тот же экземпляр и свойства.
== равны, если тот же самый класс, свойства и значения.
=== равны, если тот же самый экземпляр.
== равны, если те же самые свойства и значения.
=== равны, если тот же самый экземпляр и свойства.
abstract class First { private $a = 5; abstract public function getVar(); } class Second extends First { public function getVar() { return $this->a; } } $obj = new Second(); echo $obj->getVar();
Не будет выведено ничего
Фатальная ошибка из-за попытки доступа к члену класса с модификатором private
5
Замечание (Notice) о попытке доступа к неопределённому свойству
Пояснение: First::a является невидимой для класса-наследника.
$object = new Object();
$object = Object(new);
$&object::new Object();
$object&=Object();
$object->new Object();
<? 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 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
Ваш ответ:
Правильные ответы: instanceof,INSTANCEOF,instanceOf
<?php abstract class cOlolo{ static function dontDoIt(){ print "wow"; } abstract function doIt(); } cOlolo::dontDoIt(); ?>
Сообщение об ошибке
wow
wow + предупреждение
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
$objtwo
как копию существующего объекта $objone
, вместе
со всеми значениями его свойств?
new
duplicate
clone
static
use
class c { public $css; function make_bold(){ $this->css .= 'bold'; return $this; } function make_italic(){ $this->css .= 'italic'; return $this; } } $c = new c(); $c->make_bold()->make_italic(); echo $c->css;
ничего, код вызовет ошибку
bold
italic
bolditalic
Пояснение: Функции и методы класса, которые возвращают обьект, действуют как обьект
<?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
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();
cl2::f1()cl2::f1()
Notice
cl1::f1()cl2::f1()
Fatal Error
cl1::f1()cl1::f1()
Singleton::f1()Singleton::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 self; } private function __construct(){} private function __clone(){} function f1(){ echo 'Singleton::f1()'; return $this; } } class cl1 extends singleton{ function f1(){ parent::f1(); return $this; } function f2(){ echo 'cl1::f2()'; return $this; } } cl1::getInstance()->f1()->f2();
Notice
Fatal Error
Singleton::f1()cl1::f2()
cl1::f2()cl1::f2()
Singleton::f1()cl1::f1()
Пояснение: Позднее статическое связывание в паттерне "Одиночка" через перенаправленный вызов self. self использует класс, к которому она принадлежит, в данном случае это класс singleton, а он не имеет метода f2(), который вызывается с класса cl1.
abstract class BaseCls{ protected abstract function getName(); } class ChildCls extends BaseCls{ }
Какие из реализаций метода getName() не валидны в классе ChildCls?
protected function getName(){}
function getName(){}
private function getName(){}
public function getName(){}