Если в классе определен конструктор с параметрами, а при создании экземпляра параметры не были указаны, то:
(1) будет сгенерирована ошибка
(2) будет сгенерировано предупреждение, экземпляр будет создан
(3) будет сгенерировано предупреждение, экземпляр создан не будет
(4) экземпляр будет корректно создан
К статическим функциям, определенным в некотором классе, следует обращаться как:
(1) $имя_экземпляра_класса -> имя_функции()
(2) $имя_экземпляра_класса :: имя_функции()
(3) имя_класса -> имя_функции()
(4) имя_класса -> имя_функции()
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
function ~cFoo() {echo "был вызван деструктор";}
function __construct() {echo "|был вызван конструктор|";}
}
$bar = new cFoo();
?>
Укажите результат выполнения сценария:
(1) |был вызван конструктор|
(2) |был вызван конструктор|был вызван деструктор
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода названия компании бы разработан следующий код:
<?php
class cCompanyName
{
const COMPANY_NAME = "ООО 'Туманный Альбион'";
}
$foo = new cCompanyName();
echo $foo :: COMPANY_NAME;
?>
В процессе выполнения сценария происходит ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности кода:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " :: "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " :: "
, а " -> "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Код сценария, тестирующего работу нового класса:
<?php
class cNewArray
{
public $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
}
$foo = new cNewArray(34);
echo $foo.Num;
?>
Укажите результат выполнения сценария:
(1) 34
(2) пустая строка
(3) 0
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для разрешения доступа к методу только из класса, который этот метод содержит, используется модификатор
(1) protected
(2) closed
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function priv(){return "закрытый";}
public function prot(){return "защищенный";}
}
$foo = new cFoo();
echo $foo->priv()." ".$foo->prot();
?>
Укажите результат выполнения сценария:
(1) закрытый защищенный
(2) защищенный
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected $protected = "защищенный";
public $private = "закрытый";
function GetContents(){return $this->protected." ".$this->private;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->private;
?>
Укажите результат выполнения сценария:
(1) защищенный закрытый закрытый
(2) защищенный закрытый
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected function GetProtected(){echo "защищенный ";}
public function GetPrivate(){echo "закрытый ";}
function GetAll(){$this->GetProtected();$this->GetPrivate();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPrivate();
?>
Укажите результат выполнения сценария:
(1) защищенный закрытый закрытый
(2) защищенный закрытый
(3) пустая строка
(4) фатальная ошибка
Чтобы запретить доступ к методу в производных классах, следует:
(1) объявить метод как protected
(2) объявить метод как private
(3) объявить метод как final
(4) объявить метод как closed
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
public $_public = "открытый"; public $_protected = "защищенный";
public function _private(){return "закрытый";}
}
class cBar2 extends cBar1
{
function View(){echo $this->_public." ".$this->_protected." ".$this->_private(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный закрытый
(2) открытый защищенный
(3) пустая строка
(4) фатальна ошибка
Для расширения функциональности класса cCalculation
был разработан класс cCalculationLogged
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Calculation.php:
<?php
class cCalculation
{
/*базовая функциональность*/
public $Fed = TRUE; protected $DataPath = ""; private $CalcId;
function __construct($_DataPath,$_CalcId)
{
if($_DataPath=="")
{
$this->Fed = FALSE;
}
else
$this->DataPath = $_DataPath;
$this->CalcId = $_CalcId;
}
}
class cCalculationLogged extends cCalculation
{
/*расширенная функциональность*/
protected $LogPath;
function __construct($_DataPath,$_CalcId,$_LogPath)
{
___;
$this->LogPath = $_LogPath;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_DataPath,$_CalcId)
(2) $parent->__construct($_DataPath,$_CalcId)
(3) parent::__construct($_DataPath,$_CalcId)
(4) self:: __construct($_DataPath,$_CalcId)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cBase
{
private function f() {echo "base";}
}
class cDerivative extends cBase
{
function f () {echo "derivative";}
}
$der = new cDerivative;
$der->f ();
?>
Укажите результат выполнения сценария:
(1) base
(2) derivative
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если в классе не объявлен абстрактный метод, а сам класс объявлен абстрактным, то
(1) будет сгенерирована ошибка
(2) будет сгенерировано предупреждение
(3) ни ошибки, ни предупреждения не будет сгенерировано - такое использование механизма абстракции является корректным
(4) ни ошибки, ни предупреждения не будет сгенерировано, однако такой класс нельзя будет использовать в качестве родителя при наследовании
Проверка на совместимость типов производится с помощью оператора
(1) like
(2) is
(3) instanceof
(4) в PHP не существует подобного механизма
Сценарий PHP содержит следующий код:
<?php
abstract class cAbstractClass
{
function f() {echo "этот класс является абстрактным";}
}
$foo = new cAbstractClass;
$foo->f();
?>
Укажите результат выполнения сценария:
(1) этот класс является абстрактным
(2) пустая строка
(3) cценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."&";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."U";} }
$foo = new cDerivative1(2); $bar = new cDerivative2(4);
echo $bar->ShowData().$bar->ShowData().$foo->ShowData().$bar->ShowData();
?>
Укажите результат выполнения сценария:
(1) 4&4&2U4&
(2) 2&2&4U2&
(3) UU&U
(4) &&U&
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this-"Data = $_Data;}
final function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "значение равно ".$this-"Data;} }
$foo = new cDerivative(3);
echo $foo-"ShowData();
?>
Укажите результат выполнения сценария:
(1) значение равно 3
(2) значение равно 0
(3) значение равно
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "Я ".$this->Data;} }
$foo = new cDerivative("потомок класса cBase");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) Я потомок класса cBase
(2) Я
(3) пустая строка
(4) сценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Если требуется сделать класс потомком нескольких родителей, нужно использовать:
(1) только интерфейсы
(2) только абстрактные классы
(3) интерфейсы или абстрактные классы
(4) любые классы или интерфейсы
(5) механизм множественного наследования в PHP отсутствует
Сценарий PHP содержит следующий код:
<?php
interface iBar
{
public $some_data;
function functional();
}
class cBar implements iBar
{ function functional(){return $this->some_data;} }
$foo = new cBar; $foo->some_data = "некоторые данные";
echo $foo->functional();
?>
Укажите результат выполнения сценария:
(1) некоторые данные
(2) NULL
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iInterface1
{ abstract function f1(); }
interface iInterface2
{ function f2(); }
class cFoo implements iInterface1,iInterface2
{
function f1(){echo "реализация ";}
function f2(){echo "интерфейса";}
}
$foo = new cFoo;
$foo->f1();$foo->f2();
?>
Укажите результат выполнения сценария:
(1) реализация интерфейса
(2) реализация
(3) интерфейса
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iInterf
{ abstract function f (); }
___
{
protected $Data;
function __construct($_D){$this->Data = $_D;}
}
class cBar extends cFoo
{ function f (){echo $this->Data;} }
$foo = new cBar("реализация интерфейса");
$foo->f ();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "реализация интерфейса":
(1) class cFoo implements iInterf
(2) class cFoo extends iInterf
(3) abstract class cFoo implements iInterf
(4) abstract class cFoo extends iInterf
(5) решение поставленной задачи невозможно, т.к. в коде содержатся ошибки
Файл main.php подключает файлы a.php и b.php с помощью директивы require_once
. И a.php, и b.php подключают файл c.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы require
. Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
class Class1
{
function __construct(){echo "Class1 "; }
}
class Class2 extends Class1
{
function __construct(){echo "Class2 "; }
}
class Class3 extends Class2
{
function __construct(){echo "Class3 "; }
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new Class1; $b = new Class2; $c = new Class3;
?>
Укажите результат выполнения сценария:
(1) !Class1 !Class2 !Class3
(2) Class1 Class2 Class3
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$foo = new class_MyTemplate;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему "class_", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.". $_class.".php")
(2) require_once( "class.". $_class.".php")
(3) require_once( "class.".substr($_class,6).".php")
(4) решение поставленной задачи невозможно
Если во внешней области видимости происходит попытка изменить значение private
поля класса, метод __set()
которого определен:
(1) вызова __set()
не произойдет, будет сгенерирована ошибка
(2) произойдет вызов __set()
, ошибки сгенерировано не будет
(3) ничего не произойдет
(4) произойдет вызов __set()
, но будет сгенерировано предупреждение
Сценарий PHP содержит следующий код:
<?php
class MyClass
{
public $v =12;
function __call($_name,$_args){$this->v--; echo " ".$this->v." ";}
}
$a = new MyClass();
echo $a->g()." ".$a->v." ".$a->f()." ".$a->v." ".$a->v." ".$a->v;
?>
Укажите результат выполнения сценария:
(1) 11 10 9 8 7 6
(2) 11 10 11 10 10 10
(3) 11 11 10 10 10 10
(4) 10 10 10 10 10 10
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class C
{
public $a = "public1"; private $b = "private2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$bar = new C();
$bar->a = "public2";
$bar->b = "private2";
$bar->c = "empty";
?>
Укажите результат выполнения сценария:
(1) |a = "public2"||b = "private2"||c = "empty"|
(2) |b = "private2"||c = "empty"|
(3) |c = "empty"|
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class MyClass
{
private $Values = array("p1" => 17, "p2" => 14);
function __construct ($_p1, $_p2)
{
$this->p1 = $_p1;
$this->p2 = $_p2;
}
function __set($_name, $_value) {$this->Values[$_name] = $_value;}
function __get($_name) {return $this->Values[$_name];}
}
$c = new MyClass(1,2);
$c->p1 -= 10;
$c->p2++;
echo $c->p1," ",$c->p2;
?>
Укажите результат выполнения сценария:
(1) 7 15
(2) -10 1
(3) -9 3
(4) 1 2
(5) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить название файла, в котором определена некоторая функция, был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции (или //включающий файл с определением)
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
echo "Функция ".$_name."() определена в файле ".___;
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->getFileName
(2) $refl->getFileName()
(3) $refl->get_file_name
(4) $refl->get_file_name()
С целью определить, могут ли параметры некоторой функции принимать значение NULL
(что указано при ее определении), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
if(__2__)
{
echo "Параметр №".$param_num." функции ";
echo $_name."() может быть равен NULL<br>";
}
else
{
echo "Параметр №".$param_num." функции ";
echo $_name."() не может быть равен NULL<br>";
}
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->allowsNull
(2)
__1__ => $refl->getParameters()
__2__ => $param->allowsNull()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->allows_null()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->allows_null
В классе определено одно свойство, имеющее модификатор доступа protected
, и одно, имеющее модификатор доступа private. Для класса используется механизм итерации по умолчанию. Цикл, построенный на использовании foreach
, даст доступ
(1) и к protected
, и к private
свойствам
(2) только к protected
свойству
(3) только к private
свойству
(4) ни к одному свойству доступ не будет предоставлен
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->OperationCount++; $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { $this->OperationCount++; return key($this->Contents); }
public function next() { $this->OperationCount++; return next($this->Contents); }
public function valid() { return ($this->current() !== false); }
}
$foo = new cFoo(array( 1, 2,3,4)); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 4
(2) 5
(3) 9
(4) 11
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); $this->Contents[0]+="1"; }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents);}
public function next() { return next($this->Contents); }
public function valid() { $this->Contents[key($this->Contents)].="2";
return ($this->current() !== false); }
}
$foo = new cFoo(array("1","2","3","4")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) 1
(2) 12
(3) 22
(4) 212
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset){ return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) { $this->OperationCount++;
return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){ $this->OperationCount++;
$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) { $this->OperationCount++;
unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] = "1"; $foo["bar2"] .= "2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 3
(2) 2
(3) 1
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
В блоке catch
ловится только тот тип исключений, который
(1) является указанным в catch()
(2) пявляется потомком указанного в catch()
(3) является указанным в catch()
или его потомком
(4) в блоке catch()
ловится любой тип исключений
Сценарий PHP содержит следующий код:
<?php
function a(){echo "q "; b(); echo "2 ";}
function b(){echo "s "; throw new Exception("исключение"); echo "3 ";}
echo "4 ";
try
{
echo "d "; a(); echo "x ";
}
catch (Exception $e) {echo "2 ";}
echo "g ";
?>
Укажите результат выполнения сценария:
(1) 4 d q s 2 3 2 x g
(2) 4 d q s 3 2 x 2 g
(3) 4 d q s 2
(4) 4 d q s 2 g
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getCode()
:
<?php
class eMyException extends Exception
{
function getCode()
{return "Код исключения: ".$this->code;}
}
try {throw new eMyException("исключение");}
catch (Exception $e){echo $e->getCode();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Код исключения: 0", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля code
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getCode()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("сгенерированное исключение");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";
Если в классе определен деструктор с параметрами:
(1) будет сгенерирована ошибка, т.к. деструктор не может иметь параметров
(2) будет сгенерировано предупреждение, и такой деструктор должен вызываться только явно
(3) не будет сгенерировано ни предупреждения, ни ошибки; при неявном вызове деструктора значение параметра будет равно NULL
(4) предупреждения не будет сгенерировано, но такой деструктор должен вызываться только явно
Для клонирования объекта следует:
(1) использовать ключевое слово clone
(2) использовать метод __clone()
как $имя_объекта->__clone()
(3) использовать метод __clone()
как $имя_объекта :: __clone()
(4) использовать метод __clone()
как имя_класса :: __clone()
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $Count = 0;
function __destruct() {$this->Count++;}
function __construct() {$this->Count++;}
}
$bar = new cFoo(); echo $bar->Count;
?>
Укажите результат выполнения сценария:
(1) 0
(2) 1
(3) 2
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода количества месяцев в году бы разработан следующий код:
<?php
class cMonthCount
{
const MONTH_IN_A_YEAR = 12;
}
$foo = new cMonthCount();
echo $foo.MONTH_IN_A_YEAR;
?>
В процессе выполнения сценария происходит ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности кода:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " :: "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " :: "
, а " -> "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Код сценария, тестирующего работу нового класса:
<?php
class cNewArray
{
public $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
}
$foo = new cNewArray(14);
echo $foo :: Num;
?>
Укажите результат выполнения сценария:
(1) 14
(2) пустая строка
(3) 0
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для разрешения доступа к методу из класса, который этот метод содержит, или из классов-потомков используется модификатор
(1) protected
(2) shared
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function publ(){return "открытый";}
public function priv(){return "закрытый";}
}
$foo = new cFoo();
echo $foo->priv()." ".$foo->publ();
?>
Укажите результат выполнения сценария:
(1) закрытый открытый
(2) открытый
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $public = "открытый";
public $protected = "защищенный";
function GetContents(){return $this->protected." ".$this->public;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->public;
?>
Укажите результат выполнения сценария:
(1) защищенный открытый открытый
(2) защищенный открытый
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function GetPublic(){echo "открытый ";}
public function GetProtected(){echo "защищенный ";}
function GetAll(){$this->GetProtected();$this->GetPublic();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPublic();
?>
Укажите результат выполнения сценария:
(1) защищенный открытый открытый
(2) защищенный открытый
(3) пустая строка
(4) фатальная ошибка
Чтобы при иметь возможность в производном классе задействовать функциональность private метода базового класса, следует при описании базового класса:
(1) следует вызвать его как parent::имя_метода()
(2) следует вызвать его как self::имя_метода()
(3) следует вызвать его как $this->имя_метода()
(4) это невозможно
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
protected $_public = "открытый"; private $_protected = "защищенный";
public function _private(){return "закрытый";}
}
class cBar2 extends cBar1
{
function View(){echo $this->_public." ".$this->_protected." ".$this->_private(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный закрытый
(2) открытый защищенный
(3) открытый закрытый
(4) пустая строка
(5) фатальна ошибка
Для расширения функциональности класса cWorker
был разработан класс cManager
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Worker.php:
<?php
class cWorker
{
/*базовая функциональность*/
public $Active = TRUE; protected $Salary = 0; private $FullName;
function __construct($_Salary,$_FullName)
{
if($_Salary<=0)
{
$this->Active = FALSE;
}
else
$this->Salary = $_Salary;
$this->FullName = $_FullName;
}
}
class cManager extends cWorker
{
/*расширенная функциональность*/
protected $SubordinatesCount;
function __construct($_Salary,$_FullName,$_SubordinatesCount)
{
___;
$this->SubordinatesCount = $_SubordinatesCount;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_Salary,$_FullName)
(2) $parent->__construct($_Salary,$_FullName)
(3) parent::__construct($_Salary,$_FullName)
(4) self:: __construct($_Salary,$_FullName)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cBase
{
protected function f() {echo "base";}
public function g() {$this->f();}
}
class cDerivative extends cBase
{
function g() {echo "derivative";}
}
$der = new cDerivative;
$der->g();
?>
Укажите результат выполнения сценария:
(1) base
(2) derivative
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если в классе объявлен абстрактный метод, а сам класс не объявлен абстрактным, то
(1) будет сгенерирована ошибка
(2) будет сгенерировано предупреждение
(3) ни ошибки, ни предупреждения не будет сгенерировано - такое использование механизма абстракции является корректным
(4) ни ошибки, ни предупреждения не будет сгенерировано, однако такой класс нельзя будет использовать в качестве родителя при наследовании
Положительный результат выполнения проверки на совместимость типов оператором instanceof
означает, что
(1) переменная относится к указанному классу
(2) переменная относится к классу, потомком которого является указанный
(3) переменная либо относится к указанному классу, либо относится к классу, являющемуся потомком указанного
(4) в PHP не существует оператора instanceof
Сценарий PHP содержит следующий код:
<?php
abstract class cAbstractClass
{
abstract function f() {echo "этот класс является абстрактным";}
}
$foo = new cAbstractClass;
$foo->f();
?>
Укажите результат выполнения сценария:
(1) этот класс является абстрактным
(2) пустая строка
(3) cценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."&";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."U";} }
$foo = new cDerivative1(6); $bar = new cDerivative2(3);
echo $foo->ShowData().$bar->ShowData().$foo->ShowData().$foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) 6U3&6U6U
(2) 3U6&3U3U
(3) &U&&
(4) U&UU
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "значение равно ".$this->Data;} }
$foo = new cDerivative(3);
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) значение равно 3
(2) значение равно 0
(3) значение равно
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "I am ".$this->Data;} }
$foo = new cDerivative("Derivative");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) I am Derivative
(2) I am
(3) пустая строка
(4) сценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Интерфейс в PHP объявляется с помощью ключевого слова:
(1) interface
(2) view
(3) abstract
(4) virtual
(5) механизм множественного наследования в PHP отсутствует
Сценарий PHP содержит следующий код:
<?php
interface iBar
{
public $smth;
function functional();
}
class cBar implements iBar
{ function functional(){return $this->smth;} }
$foo = new cBar; $foo->smth = "строка";
echo $foo->functional();
?>
Укажите результат выполнения сценария:
(1) строка
(2) NULL
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iI1
{ function f1(); }
interface iI2
{ abstract function f2(); }
class cFoo implements iI1,iI2
{
function f1(){echo 12;}
function f2(){echo 23;}
}
$foo = new cFoo;
$foo->f1();$foo->f2();
?>
Укажите результат выполнения сценария:
(1) 1223
(2) 12
(3) 23
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface i
{ function f (); }
___
{
private $Data;
function __construct($_D){$this->Data = $_D;}
}
class cBar extends cFoo
{ function f (){echo $this->Data;} }
$foo = new cBar("реализация интерфейса");
$foo->f ();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "реализация интерфейса":
(1) class cFoo implements i
(2) class cFoo extends i
(3) abstract class cFoo implements i
(4) abstract class cFoo extends i
(5) решение поставленной задачи невозможно
Файл main.php подключает файлы script1.php и script2.php с помощью директивы include
(сначала первый, потом второй). Файл script1.php подключает файл basescript.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы include
, а script2.php - с помощью директивы include_once
. Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
class C1
{
function __construct(){echo "C1 "; }
}
abstract class C2 extends C1
{
function __construct(){echo "C2 "; }
}
class C3 extends C2
{
function __construct(){echo "C3 "; }
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new C1; $b = new C2; $c = new C3;
?>
Укажите результат выполнения сценария:
(1) C1 !C2 C3
(2) C1 C2 C3
(3) C1 C3
(4) пустая строка
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$foo = new class_MyClass;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему "class_", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.c_название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.c_". $_class.".php")
(2) require_once( "class.c_". $_class.".php")
(3) require_once( "class.c_".substr($_class,6).".php")
(4) решение поставленной задачи невозможно
Если во внешней области видимости происходит попытка получить значение protected
поля класса, метод __get()
которого определен:
(1) вызова __get()
не произойдет, будет сгенерирована ошибка
(2) произойдет вызов __get()
, ошибки сгенерировано не будет
(3) ничего не произойдет
(4) произойдет вызов __get()
, будет сгенерировано предупреждение
Сценарий PHP содержит следующий код:
<?php
class AClass
{
public $v =15;
function __call($_name,$_args){$this->v++; echo " ".$this->v." ";}
}
$a = new AClass();
echo $a->v." ".$a->s()." ".$a->f()." ".$a->v." ".$a->D()." ".$a->v;
?>
Укажите результат выполнения сценария:
(1) 15 16 17 18 19 20
(2) 16 17 18 15 17 18
(3) 15 16 17 17 18 18
(4) 20 20 20 20 20 20
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class C
{
private $a = "private1"; protected $b = "protected2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$bar = new C();
$bar->a = "private2";
$bar->b = "protected2";
$bar->c = "empty";
?>
Укажите результат выполнения сценария:
(1) |a = "private2"||b = "protected2"||c = "empty"|
(2) |c = "empty"|
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class MyClass
{
private $Values = array("p1" => 5, "p2" => 6);
function __construct ($_p1, $_p2)
{
$this->p1 = $_p1;
$this->p2 = $_p2;
}
function __set($_name, $_value) {$this->Values[$_name] = $_value;}
function __get($_name) {return $this->Values[$_name];}
}
$c = new MyClass(3,4);
$c->p1 *= 2;
$c->p2++;
echo $c->p1," ",$c->p2;
?>
Укажите результат выполнения сценария:
(1) 10 7
(2) 0 1
(3) 6 5
(4) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить строку файла, на которой начинается определение некоторой функции, был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции (или //включающий файл с определением)
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
echo "Определение функция ".$_name."() начинается на строке ".___;
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->getStartLine
(2) $refl->getStartLine()
(3) $refl->get_start_line
(4) $refl->get_start_line()
С целью определить, доступны ли для параметров некоторой функции значения по умолчанию (что указано при ее определении), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
if(__2__)
{
echo "Для параметра №".$param_num." функции ";
echo $_name."() задано значение по умолчанию<br>";
}
else
{
echo "Для параметра №".$param_num." функции ";
echo $_name."() значение по умолчанию не задано<br>";
}
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->isDefautValueAvailable
(2)
__1__ => $refl->getParameters()
__2__ => $param->isDefaultValueAvailable()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->is_default_value_available()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->is_default_value_available
Синтаксис foreach($some_object as $foo => $bar)
, используемый для итерации свойств объекта методом по умолчанию, даст доступ
(1) к копиям значений свойств
(2) к самим свойствам (при итерации можно будет изменять свойства объекта через переменную $bar
)
(3) только к статическим свойствам
(4) такой синтаксис недопустим при итерации свойств объекта
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->OperationCount++; $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { $this->OperationCount++; return next($this->Contents); }
public function valid() { return ($this->current() !== false); }
}
$foo = new cFoo(array( 1, 2,3,4)); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 4
(2) 5
(3) 9
(4) 11
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); $this->Contents[0].="1"; }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents);}
public function next() { return next($this->Contents); }
public function valid() { $this->Contents[key($this->Contents)]+="2";
return ($this->current() !== false); }
}
$foo = new cFoo(array("a","b","c","d")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) a1
(2) a12
(3) 2
(4) 21
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset){ return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) {
return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){ $this->OperationCount++;
$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) { $this->OperationCount++;
unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] .= "1"; $foo["bar2"] .= "2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 3
(2) 2
(3) 1
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Выполнение блока catch
при возникновении исключения происходит
(1) до уничтожения всех объектов в блоке try
(2) после уничтожения всех объектов в блоке try
(3) при возникновении исключения (даже если оно было поймано) объекты в блоке try
уничтожаются только по завершении работы сценария
(4) при возникновении исключения (даже если оно было поймано) объекты в блоке try
не уничтожаются, что приводит к утечкам памяти
Сценарий PHP содержит следующий код:
<?php
function a(){echo "8 "; b(); echo "f ";}
function b(){echo "k "; throw new Exception("ex"); echo "h ";}
echo "f ";
try
{
echo "c "; a(); echo "u ";
}
catch (Exception $e) {echo "n ";}
echo "4 ";
?>
Укажите результат выполнения сценария:
(1) f c 8 k n h f u 4
(2) f c 8 k h f u n 4
(3) f c 8 k n
(4) f c 8 k n 4
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getFile()
. Содержимое файла NewExc.php:
<?php
class eNewException extends Exception
{
function getFile()
{return "Exception in: ".$this->file;}
}
try {throw new eNewException("test");}
catch (Exception $e){echo $e->getFile();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Exception in: NewExc.php", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля file
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getFile()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("тест механизма исключений");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";
Если в классе определены два метода с одинаковыми именами и разными списками параметров:
(1) при выполнении сценария будет сгенерирована фатальная ошибка
(2) будет сгенерировано предупреждение, второе определение заменит первое
(3) не будет сгенерировано ни предупреждения, ни ошибки; второе определение заменит первое
(4) не будет сгенерировано ни предупреждения, ни ошибки; вызов того или иного метода буде зависеть от типа и количества указанных при вызове параметров
Для преобразования объекта в строку (метод __toString()
переопределен для корректного преобразования) следует:
(1) явно привести значение объекта к строковому типу
(2) использовать метод __toString() как $имя_объекта->__ toString()
(3) использовать метод __ toString() как $имя_объекта :: __ toString()
(4) использовать метод __ toString() как имя_класса :: __ toString()
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $Count = 0;
function __destruct() {$this->Count++;}
function __construct() {$this->Count++;}
function __cFoo() {$this->Count++;}
}
$bar = new cFoo(); echo $bar->Count;
?>
Укажите результат выполнения сценария:
(1) 0
(2) 1
(3) 2
(4) 3
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода количества дней в неделе бы разработан следующий код:
<?php
class cDayCount
{
const DAY_IN_A_WEEK = 7;
}
$foo = new cDayCount();
echo $foo :: DAY_IN_A_WEEK;
?>
В процессе выполнения сценария происходит ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности кода:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " :: "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " :: "
, а " -> "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Код сценария, тестирующего работу нового класса:
<?php
class cNewArray
{
public $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
}
$foo = new cNewArray;
echo $foo->Num;
?>
Укажите результат выполнения сценария:
(1) 123
(2) 0
(3) пустая строка
(4) предупреждение (warning) и пустая строка
(5) фатальная ошибка
Для разрешения доступа к методу из любой области видимости используется модификатор
(1) protected
(2) open
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function publ(){return "открытый";}
public function priv(){return "закрытый";}
}
$foo = new cFoo();
echo $foo->priv()." ".$foo->publ();
?>
Укажите результат выполнения сценария:
(1) закрытый открытый
(2) открытый
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $public = "открытый";
public $private = "закрытый";
function GetContents(){return $this->private." ".$this->public;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->public;
?>
Укажите результат выполнения сценария:
(1) закрытый открытый открытый
(2) закрытый открытый
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function GetPublic(){echo "открытый ";}
public function GetPrivate(){echo "закрытый ";}
function GetAll(){$this->GetPrivate();$this->GetPublic();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPublic();
?>
Укажите результат выполнения сценария:
(1) закрытый открытый открытый
(2) закрытый открытый
(3) пустая строка
(4) фатальная ошибка
Чтобы сохранить доступность метода в производных классах, не запрещая его переопределение, следует:
(1) "обернуть" private
метод в public
метод
(2) "обернуть" private
метод в protected
метод
(3) оставить все как есть, в производном классе будет возможность использовать private методы базового класса
(4) это невозможно
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
private $_public = "открытый"; public $_protected = "защищенный";
protected function _private(){return "закрытый";}
}
class cBar2 extends cBar1
{
function View(){echo $this->_public." ".$this->_protected." ".$this->_private(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный закрытый
(2) открытый защищенный
(3) открытый закрытый
(4) защищенный закрытый
(5) фатальна ошибка
Для расширения функциональности класса cEntity
был разработан класс cEntityRendered
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Entity.php:
<?php
class cEntity
{
/*базовая функциональность*/
public $Exists = TRUE; protected $Complexity = 0; private $Name;
function __construct($_Complexity,$_Name)
{
if($_Complexity<=1)
{
$this->Exists = FALSE;
}
else
$this->Complexity = $_Complexity;
$this->Name = $_Name;
}
}
class cEntityRedered extends cEntity
{
/*расширенная функциональность*/
protected $RenderPath;
function __construct($_Complexity,$_Name,$_RenderPath)
{
___;
$this->RenderPath = $_RenderPath;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_Complexity,$_Name)
(2) $parent->__construct($_Complexity,$_Name)
(3) parent::__construct($_Complexity,$_Name)
(4) self:: __construct($_Complexity,$_Name)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cParent
{
private function f() {echo "parent";}
public function g() {$this->f();}
}
class cChild extends cParent
{
function g() {echo "child";}
}
$der = new cChild;
$der->g();
?>
Укажите результат выполнения сценария:
(1) parent
(2) child
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если метод объявлен абстрактным, то его тело
(1) должно отсутствовать
(2) может присутствовать, но в этом случае будет сгенерировано предупреждение
(3) может присутствовать - при этом предупреждение сгенерировано не будет
(4) должно присутствовать, но быть абсолютно пустым (т.е. иметь вид " {} ")
Если класс foo
является потомком класса bar
, а переменная $a
имеет класс foo
, то выражение $a instanceof "foo"
будет равно:
(1) true
(2) false
(3) в PHP не существует оператора instanceof
(4) будет сгенерирована ошибка парсера
Сценарий PHP содержит следующий код:
<?php
abstract class cAbstractClass
{
abstract function f();
}
$foo = new cAbstractClass;
$foo->f();
?>
Укажите результат выполнения сценария:
(1) этот класс является абстрактным
(2) пустая строка
(3) cценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."U";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."&";} }
$foo = new cDerivative2(3); $bar = new cDerivative1(1);
echo $foo->ShowData().$bar->ShowData().$foo->ShowData().$foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) 3U1&3U3U
(2) 1U3&1U1U
(3) &U&&
(4) U&UU
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "значение равно ".$this->Data;} }
$foo = new cDerivative(12);
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) значение равно 12
(2) значение равно 0
(3) значение равно
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "Я ".$this->Data;} }
$foo = new cDerivative("derivative");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) Я derivative
(2) Я
(3) пустая строка
(4) сценарий не будет выполнен, т.к. нарушены правила работы с механизмом абстракции
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Если класс, реализующий интерфейс, содержит определение не всех методов, заявленных в интерфейсе, то:
(1) генерируется ошибка
(2) генерируется предупреждение
(3) ни ошибка, ни предупреждение не генерируются
(4) механизм множественного наследования в PHP отсутствует
Сценарий PHP содержит следующий код:
<?php
interface iB
{
protected $smth;
function f ();
}
class cBar implements iB
{ function f (){return $this->smth;} }
$foo = new cBar; $foo->smth = "строковые данные";
echo $foo->f ();
?>
Укажите результат выполнения сценария:
(1) строковые данные
(2) NULL
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iI1
{ function f1(); }
interface iI2
{ function f2(); }
class cFoo implements iI1,iI2
{
function f1(){echo 123;}
function f2(){echo "abc";}
}
$foo = new cFoo;
$foo->f1();$foo->f2();
?>
Укажите результат выполнения сценария:
(1) 123abc
(2) 123
(3) abc
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface i
{ function f (); }
___
{
protected $Data;
function __construct($_D){$this->Data = $_D;}
}
class cBar extends cFoo
{ function f (){echo $this->Data;} }
$foo = new cBar("реализация интерфейса");
$foo->f ();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "реализация интерфейса":
(1) class cFoo implements i
(2) class cFoo extends i
(3) abstract class cFoo implements i
(4) abstract class cFoo extends i
(5) решение поставленной задачи невозможно
Файл main.php подключает файлы script1.php и script2.php с помощью директивы include
(сначала первый, потом второй). Файл script2.php подключает файл basescript.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы include
, а script1.php - с помощью директивы include_once
Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
class One
{
function __construct(){echo "One "; }
}
class Two
{
function __construct(){echo "Two "; }
}
class Three
{
function __construct(){echo "Three "; }
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new One; $b = new Two; $c = new Three;
?>
Укажите результат выполнения сценария:
(1) !One !Two !Three
(2) One Two Three
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$foo = new class_SimpleClass;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему "class_", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.the_название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.the_". $_class.".php")
(2) require_once( "class.the_". $_class.".php")
(3) require_once( "class.the_".substr($_class,6).".php")
(4) решение поставленной задачи невозможно
Если во внешней области видимости происходит попытка изменить значение protected
поля класса, метод __set()
которого определен:
(1) вызова __set()
не произойдет, будет сгенерирована ошибка
(2) произойдет вызов __set()
, ошибки сгенерировано не будет
(3) ничего не произойдет
(4) произойдет вызов __set()
, но будет сгенерировано предупреждение
Сценарий PHP содержит следующий код:
<?php
class AClass
{
public $v =34;
function __call($_name,$_args){$this->v--; echo " ".$this->v." ";}
}
$a = new AClass();
echo $a->d()." ".$a->v." ".$a->v." ".$a->v." ".$a->p()." ".$a->o();
?>
Укажите результат выполнения сценария:
(1) 34 33 32 31 30 29
(2) 33 32 31 33 33 33
(3) 33 33 33 33 32 31
(4) 31 31 31 31 31 31
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class AClass
{
private $a = "закрытый1"; protected $b = "защищенный2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$bar = new AClass();
$bar->a = "закрытый2";
$bar->b = "защищенный2";
$bar->c = "несуществующий";
?>
Укажите результат выполнения сценария:
(1) |a = "закрытый2"||b = "защищенный2"||c = "несуществующий"|
(2) |c = "несуществующий"|
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class MyClass
{
private $Values = array("p1" => 2, "p2" => 9);
function __construct ($_p1, $_p2)
{
$this->p1 = $_p1;
$this->p2 = $_p2;
}
function __set($_name, $_value) {$this->Values[$_name] = $_value;}
function __get($_name) {return $this->Values[$_name];}
}
$c = new MyClass(4,7);
$c->p1 /= 2;
$c->p2--;
echo $c->p1," ",$c->p2;
?>
Укажите результат выполнения сценария:
(1) 4 7
(2) 1 8
(3) 2 6
(4) 0 -1
(5) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить строку файла, на которой кончается определение некоторой функции, был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции (или //включающий файл с определением)
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
echo "Определение функция ".$_name."() кончается на строке ".___;
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->getEndLine
(2) $refl->getEndLine()
(3) $refl->get_end_line
(4) $refl->get_end_line()
С целью определить имена параметров некоторой функции (указанные при ее определении), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
echo "Параметр №".$param_num." функции ";
echo $_name."() имеет имя ".__2__."<br>";
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->getName
(2)
__1__ => $refl->getParameters()
__2__ => $param->getName()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->get_name()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->get_name
Синтаксис foreach($some_object as $foo => &$bar)
, используемый для итерации свойств объекта методом по умолчанию, даст доступ
(1) к копиям значений свойств
(2) к самим свойствам (при итерации можно будет изменять свойства объекта через переменную $bar
)
(3) такой синтаксис недопустим при итерации свойств объекта
(4) только к статическим свойствам
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->OperationCount++;
$this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { return next($this->Contents); }
public function valid() {$this->OperationCount++;
return ($this->current() !== false); }
}
$foo = new cFoo(array( 1, 2,3,4)); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 5
(2) 6
(3) 9
(4) 11
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents;
$this->Contents[0].="1"; }
public function rewind() { reset($this->Contents); $this->Contents[0].="1"; }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents);}
public function next() { return next($this->Contents); }
public function valid() { $this->Contents[key($this->Contents)]+="2";
return ($this->current() !== false); }
}
$foo = new cFoo(array("a","b","c","d")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) a1
(2) a12
(3) 2
(4) 21
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset){ return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) {
return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){ $this->OperationCount++;
$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) {unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] .= "1"; $foo["bar2"] .= "2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 3
(2) 2
(3)
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
При возникновении исключения
(1) полностью выполняется блок try
(вместе с телами вызванных из него функций), затем происходит выполнение блока catch
(2) полностью выполняется блок try
(однако, если исключение возникло в процессе выполнения вызванной из блока try
функции, работа функции прерывается), затем происходит выполнение блока catch
(3) прерывается выполнение блока try
(в том числе, если исключение было сгенерировано в функции, вызванной из блока try
, прерывается выполнение функции) и выполняется блок catch
(4) особенности выполнения блока try
зависят от типа исключения
Сценарий PHP содержит следующий код:
<?php
function a(){echo "k "; b(); echo "d ";}
function b(){echo "s "; throw new Exception("test"); echo "x ";}
echo "s ";
try
{
echo "4 "; a(); echo "j ";
}
catch (Exception $e) {echo "5 ";}
echo "z ";
?>
Укажите результат выполнения сценария:
(1) s 4 k s 5 x d j z
(2) s 4 k s x d j z 5
(3) s 4 k s 5
(4) s 4 k s 5 z
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getLine()
:
<?php
class eMyException extends Exception
{
function getLine()
{return "Исключение сгенерировано на ".$this->line." строке";}
}
try {throw new eMyException("тест");}
catch (Exception $e){echo $e->getLine();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Исключение сгенерировано на 7 строке", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля line
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getLine()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("сгенерированное исключение");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";
Значением поля класса по умолчанию может являться
(1) значение переменной
(2) константа
(3) результат вызова функции
(4) возможность указания значений полей по умолчанию в PHP не предусмотрена
Если при создании копии объекта для него не был объявлен метод __clone()
, то:
(1) генерируется исключение
(2) исключение не генерируется, но и копия не создается
(3) создается копия объекта путем копирования всех полей объекта
(4) генерируется предупреждение
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
function cFoo() {echo "была вызвана функция cFoo()";}
function __construct() {echo "была вызвана функция __construct()";}
}
$bar = new cFoo();
?>
Укажите результат выполнения сценария:
(1) была вызвана функция cFoo()
(2) была вызвана функция __construct()
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода значения числа (округленного до 3.14) бы разработан следующий код:
<?php
class cPiProvider
{
const PI_VALUE = 3.14;
}
$foo = new cPiProvider();
echo $foo->PI_VALUE;
?>
Результатом выполнения сценария является пустая строка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректной работы программы:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " -> "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " -> "
, а " :: "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Для удобства переноса старого кода, в котором использовался стандартный тип, под новую архитектуру приложения имя класса решили оставить таким же. Код сценария, тестирующего работу нового класса:
<?php
class Array
{
public $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
function getNum(){return $this->Num;}
}
$foo = new Array(12);
echo $foo->getNum();
?>
Укажите результат выполнения сценария:
(1) 12
(2) пустая строка
(3) 0
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для разрешения доступа к полю только из класса, который это поле содержит, используется модификатор
(1) protected
(2) closed
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function publ(){return "открытый";}
private function priv(){return "закрытый";}
}
$foo = new cFoo();
echo $foo->publ()." ".$foo->priv();
?>
Укажите результат выполнения сценария:
(1) открытый закрытый
(2) открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
private $private = "закрытый";
public $public = "открытый";
function GetContents(){return $this->private." ".$this->public;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->private." ".$foo->public;
?>
Укажите результат выполнения сценария:
(1) закрытый открытый закрытый открытый
(2) закрытый открытый открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
private function GetPrivate(){echo "закрытый ";}
public function GetPublic(){echo "открытый ";}
function GetAll(){$this->GetPrivate();$this->GetPublic();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPublic();
?>
Укажите результат выполнения сценария:
(1) закрытый открытый открытый
(2) закрытый открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Чтобы сохранить доступность метода в производных классах, но запретить его переопределение, следует:
(1) объявить метод как protected
(2) объявить метод как private
(3) объявить метод как final
(4) объявить метод как closed
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
public $a = "a"; protected $b = "b";
private function c(){return "c";}
}
class cBar2 extends cBar1
{
function View() { echo $this->a." ".$this->b." ".$this->c(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) a b c
(2) a b
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для расширения функциональности класса cFunctional
был разработан класс cFunctionalExtended
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Functional.php:
<?php
class cFunctional
{
/*базовая функциональность*/
public $LastWarning; protected $Mode; private $TempFilename;
function __construct($_Mode,$_TempFilename)
{
if($_Mode<=0)
{
$this->Mode = 0;
$this->LastWarning = "Invalid mode, mode set to 0";
}
else
$this->Mode = $_Mode;
$this->TempFilename = $_TempFilename;
}
}
class cFunctionalExtended extends cFunctional
{
/*расширенная функциональность*/
protected $AdditionalData;
function __construct($_Mode,$_TempFilename,$_AdditionalData)
{
___;
$this->AdditionalData = $_AdditionalData;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_Mode,$_TempFilename)
(2) $parent->__construct($_Mode,$_TempFilename)
(3) parent::__construct($_Mode,$_TempFilename)
(4) self:: __construct($_Mode,$_TempFilename)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cFoo1
{
function bar() {echo "bar1";}
}
class cFoo2 extends cFoo1
{
function bar() {echo "bar2";}
}
$foo = new cFoo2;
$foo->bar();
?>
Укажите результат выполнения сценария:
(1) bar1
(2) bar2
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если класс объявлен абстрактным, то
(1) экземпляр такого класса не может быть создан
(2) экземпляр такого класса может быть создан, если в нем нет ни одного абстрактного метода
(3) экземпляр такого класса может быть создан, если в нем есть хотя бы одно поле
(4) экземпляр такого класса может быть создан, если в нем есть хотя бы одно статическое поле
Абстрактный класс объявляется с помощью ключевого слова
(1) abstract
(2) virtual
(3) sealed
(4) pure
Сценарий PHP содержит следующий код:
<?php
abstract class cFoo
{
function bar() {echo "bar";}
}
$foo = new cFoo;
$foo->bar();
?>
Укажите результат выполнения сценария:
(1) bar
(2) пустая строка
(3) cценарий не будет выполнен, т.к. создание экземпляра абстрактного класса недопустимо и приведет к фатальной ошибке
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
private $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."0";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."-";} }
$foo = new cDerivative1(2); $bar = new cDerivative2(4);
echo $foo->ShowData().$foo->ShowData().$bar->ShowData().$foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) 2-2-402-
(2) 4-4-204-
(3) 00-0
(4) --0-
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
virtual function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "Data = ".$this->Data;} }
$foo = new cDerivative(5);
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) Data = 5
(2) Data = 0
(3) Data =
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова virtual
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
sealed class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "I am a ".$this->Data;} }
$foo = new cDerivative("dog");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) I am a dog
(2) I am a
(3) пустая строка
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова sealed
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Интерфейсы отличаются от абстрактных классов:
(1) тем, что абстрактный класс может содержать поля, а интерфейс - нет
(2) тем, что в определенных условиях возможно создание экземпляра абстрактного класса, а создание экземпляра интерфейса невозможно
(3) тем, что в определенных условиях возможно создание экземпляра интерфейса, а создание экземпляра абстрактного класса невозможно
(4) только синтаксисом
Сценарий PHP содержит следующий код:
<?php
interface iBase
{
public $Field;
abstract function DoSmth();
}
class cFoo implements iBase
{ function DoSmth(){return $this->Field;} }
$foo = new cFoo; $foo->Field = 123;
echo $foo->DoSmth();
?>
Укажите результат выполнения сценария:
(1) 123
(2) 0
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iB1
{ abstract function F1(); }
interface iB2
{ abstract function F2(); }
class cFoo implements iB1,iB2
{
function F1(){echo 1;}
function F2(){echo 2;}
}
$foo = new cFoo;
$foo->F1();$foo->F2();
?>
Укажите результат выполнения сценария:
(1) 12
(2) 1
(3) 2
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iTheF
{ function F(); }
___
{
protected $D;
function __construct($_D){$this->D = $_D;}
}
class cBar extends cFoo
{ function F(){echo $this->D;} }
$foo = new cBar(24);
$foo->F();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "24":
(1) class cFoo implements iTheF
(2) class cFoo extends iTheF
(3) abstract class cFoo implements iTheF
(4) abstract class cFoo extends iTheF
Файл main.php подключает файлы additional1.php и additional2.php с помощью директивы include
. И additional1.php, и additional2.php подключают файл common.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы include
. Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
abstract class A
{
function __construct(){echo "A "; }
abstract function foo();
}
class B extends A
{
function __construct(){echo "B "; }
function foo(){return 1;}
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new A; $b = new B; $c = new C;
?>
Укажите результат выполнения сценария:
(1) A B !C
(2) A B
(3) B
(4) пустая строка
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$writer = new cWriter;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему символа "c", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.". $_class.".php")
(2) require_once( "class.". $_class.".php")
(3) require_once( "class.".substr($_class,1).".php")
(4) выполнение поставленной задачи невозможно
Функциональность, описанная в определенном в методе класса __get()
будет задействована:
(1) при каждой попытке получить значение любого поля класса или константы (существующих или несуществующих)
(2) при каждой попытке получить значение любого поля класса (существующего или несуществующего)
(3) при каждой попытке получить значение несуществующего поля класса или несуществующей константы
(4) при каждой попытке получить значение несуществующего поля класса
(5) при каждой попытке получить значение несуществующего или недоступного в контексте обращения поля класса
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $a = 10;
function __call($_name,$_args){$this->a-=2; echo " ".$this->a." ";}
}
$foo = new cFoo();
echo $foo->a." ".$foo->q()." ".$foo->w()." ".$foo->a." ".$foo->e()." ".$foo->a;
?>
Укажите результат выполнения сценария:
(1) 10 8 6 6 4 4
(2) 8 6 4 10 6 4
(3) 10 6 4 8 6 4
(4) 10 6 4
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public $a = "открытое1"; protected $b = "защищенное2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$foo = new cFoo();
$foo->a = "открытое2";
$foo->b = "защищенное2";
$foo->c = "несуществующее";
?>
Укажите результат выполнения сценария:
(1) |a = "открытое2"||b = "защищенное2"||c = "несуществующее"|
(2) |b = "защищенное2"||c = "несуществующее"|
(3) |c = "несуществующее"|
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
private $Properties = array("bar1" => 123, "bar2" => 1);
function __construct ($_bar1, $_bar2)
{
$this->bar1 = $_bar1;
$this->bar2 = $_bar2;
}
function __set($_name, $_value) {$this->Properties[$_name] = $_value;}
function __get($_name) {return $this->Properties[$_name];}
}
$foo = new cFoo(1,2);
$foo->bar1 += 34;
$foo->bar2++;
echo $foo->bar1," ",$foo->bar2;
?>
Укажите результат выполнения сценария:
(1) 157 2
(2) 34 1
(3) 35 3
(4) 1 2
(5) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить, возвращает ли некоторая функция результат по ссылке или по значению, был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
if(___)
echo "Функция ".$_name."() возвращает результат по ссылке";
else
echo "Функция ".$_name."() возвращает результат по значению";
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->returnsReference
(2) $refl->returnsReference()
(3) $refl->returns_reference
(4) $refl->returns_reference()
С целью определить, передаются ли в некоторую функцию параметры по ссылке или по значению, был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
if(__2__)
{
echo "Параметр №".$param_num." передается в функцию ";
echo $_name."() по ссылке<br>";
}
else
{
echo "Параметр №".$param_num." передается в функцию ";
echo $_name."() по значению<br>";
}
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->isPassedByReference
(2)
__1__ => $refl->getParameters()
__2__ => $param->isPassedByReference()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->is_passed_by_reference()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->is_passed_by_reference
По умолчанию итерация свойств объекта будет производиться по
(1) всем свойствам
(2) всем свойствам, кроме свойств с модификатором доступа private
(3) свойствам, имеющим модификатор доступа public
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { $this->OperationCount++; reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { return next($this->Contents); }
public function valid() { $this->OperationCount++;
return ($this->current() !== false); }
}
$foo = new cFoo(array("a","b","c","d")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 4
(2) 5
(3) 6
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); $this->Contents[0].="1"; }
public function current() { $this->Contents[key($this->Contents)].="2";
return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { return next($this->Contents); }
public function valid() { return ($this->current() !== false); }
}
$foo = new cFoo(array("a","b","c","d")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) a
(2) a1
(3) a12
(4) a122
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset) { return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) { $this->OperationCount++;
return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) { unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] = "значение1"; $foo["bar2"] .= "значение2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 3
(2) 2
(3) 1
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
При генерации исключения:
(1) продолжается выполнение try
-блока, по завершении которого исключение обрабатывается с помощью catch
(2) продолжается выполнение функции, вызванной в try
-блоке (если она была вызвана); после завершения работы такой функции (или иерархии функций, вызываемых друг из друга) выполнение try
-блока прерывается и исключение обрабатывается с помощью catch
(3) при любых обстоятельствах прерывается выполнение try
-блока (с корректным уничтожением локальных объектов), и исключение обрабатывается с помощью catch
(4) сценарий выполняется до конца; после завершения - исключение обрабатывается с помощью catch
Сценарий PHP содержит следующий код:
<?php
function first(){echo "3 "; second(); echo "6 ";}
function second(){echo "4 "; throw new Exception("test"); echo "5 ";}
echo "1 ";
try
{
echo "2 "; first(); echo "7 ";
}
catch (Exception $e) {echo "e ";}
echo "8 ";
?>
Укажите результат выполнения сценария:
(1) 1 2 3 4 5 6 7 8
(2) 1 2 3 4 5 6 7 e 8
(3) 1 2 3 4 5 6 e 8
(4) 1 2 3 e 8
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getMessage()
:
<?php
class eFooException extends Exception
{
function getMessage()
{return "Произошла ошибка! Подробности: ".$this->message;}
}
try {throw new eFooException("тест");}
catch (Exception $e){echo $e->getMessage();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Произошла ошибка! Подробности: тест", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля message
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getMessage()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("тест");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";
Значением поля класса по умолчанию может являться
(1) значение другого поля
(2) константа
(3) результат вычисления значения выражения
(4) возможность указания значений полей по умолчанию в PHP не предусмотрена
При клонировании объекта методом по умолчанию:
(1) копируются все поля объекта
(2) копируются public
и protected
поля объекта
(3) копируются только public
поля объекта
(4) никакие поля не копируются
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
function __destruct() {echo "была вызвана функция __destruct()";}
function cFoo() {echo "|была вызвана функция cFoo()|";}
}
$bar = new cFoo();
?>
Укажите результат выполнения сценария:
(1) была вызвана функция __destruct()
(2) |была вызвана функция cFoo()|была вызвана функция __destruct()
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода названия страны бы разработан следующий код:
<?php
class cCountryName
{
const COUNTRY_NAME = "Россия";
}
$foo = new cCountryName();
echo $foo :: COUNTRY_NAME;
?>
В процессе выполнения сценария происходит ошибка парсера. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности кода:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " -> "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " -> "
, а " :: "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Код сценария, тестирующего работу нового класса:
<?php
class cNewArray
{
protected $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
}
$foo = new cNewArray(2);
echo $foo->Num;
?>
Укажите результат выполнения сценария:
(1) 12
(2) пустая строка
(3) 0
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для разрешения доступа к полю из класса, который это поле содержит, или из классов-потомков используется модификатор
(1) protected
(2) closed
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
public function publ(){return "открытый";}
protected function prot(){return "защищенный";}
}
$foo = new cFoo();
echo $foo->publ()." ".$foo->prot();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный
(2) открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected $protected = "защищенный";
public $public = "открытый";
function GetContents(){return $this->protected." ".$this->public;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->protected." ".$foo->public;
?>
Укажите результат выполнения сценария:
(1) защищенный открытый защищенный открытый
(2) защищенный открытый открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected function GetProtected(){echo "защищенный ";}
public function GetPublic(){echo "открытый ";}
function GetAll(){$this->GetProtected();$this->GetPublic();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPublic();
?>
Укажите результат выполнения сценария:
(1) защищенный открытый открытый
(2) защищенный открытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Чтобы сохранить доступность метода в производных классах, не запрещая его переопределение, следует:
(1) объявить метод как protected
(2) объявить метод как private
(3) объявить метод как final
(4) объявить метод как closed
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
public $publ = "открытый"; protected $prot = "защищенный";
private function priv(){return "закрытый";}
}
class cBar2 extends cBar1
{
function View() { echo $this->publ." ".$this->prot." ".$this->priv(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный закрытый
(2) открытый защищенный
(3) пустая строка
(4) фатальная ошибка
Для расширения функциональности класса cTemplate
был разработан класс cTemplateExtended
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Template.php:
<?php
<?php
class cTemplate
{
/*базовая функциональность*/
public $LastWarning; protected $TType; private $XMLStr;
function __construct($_TType,$_XMLStr)
{
if($_TType=="")
{
$this->TType = "simple";
$this->LastWarning = "Invalid type, type set to 'simple'";
}
else
$this->TType = $_TType;
$this->XMLStr = $_XMLStr;
}
}
class cTemplateExtended extends cTemplate
{
/*расширенная функциональность*/
protected $AdditionalParams;
function __construct($_TType,$_XMLStr,$_AdditionalParams)
{
___;
$this->AdditionalParams = $_AdditionalParams;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_TType,$_XMLStr)
(2) $parent->__construct($_TType,$_XMLStr)
(3) parent::__construct($_TType,$_XMLStr)
(4) self:: __construct($_TType,$_XMLStr)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cBase
{
function foo() {echo 1;}
}
class cDerivative extends cBase
{
function foo() {echo 2;}
}
$der = new cDerivative;
$der->foo();
?>
Укажите результат выполнения сценария:
(1) 1
(2) 2
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если в классе объявлен абстрактный метод, то
(1) экземпляр такого класса не может быть создан
(2) экземпляр такого класса может быть создан, если он сам не объявлен абстрактным
(3) экземпляр такого класса может быть создан, если в нем есть хотя бы одно поле
(4) экземпляр такого класса может быть создан, если в нем есть хотя бы одно статическое поле
Абстрактный метод объявляется с помощью ключевого слова
(1) abstract
(2) virtual
(3) sealed
(4) pure
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
abstract function bar() {echo "bar";}
}
$foo = new cFoo;
$foo->bar();
?>
Укажите результат выполнения сценария:
(1) bar
(2) пустая строка
(3) cценарий не будет выполнен, т.к. создание экземпляра абстрактного класса недопустимо и приведет к фатальной ошибке
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."0";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."-";} }
$foo = new cDerivative1(3); $bar = new cDerivative2(5);
echo $bar->ShowData().$foo->ShowData().$foo->ShowData().$bar->ShowData();
?>
Укажите результат выполнения сценария:
(1) 5-30305-
(2) 3-50503-
(3) -00-
(4) 0--0
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "this is ".$this->Data;} }
$foo = new cDerivative(34);
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) this is 34
(2) this is 0
(3) this is
(4) пустая строка
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
virtual class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "I am a ".$this->Data;} }
$foo = new cDerivative("cat");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) I am a cat
(2) I am a
(3) пустая строка
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова sealed
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Из приведенных ниже высказываний укажите истинное:
(1) экземпляр интерфейса создать нельзя
(2) возможно создать экземпляр интерфейса, если в нем есть хотя бы одно поле
(3) возможно создать экземпляр интерфейса так же как экземпляр обычного класса
(4) возможно создать экземпляр интерфейса, если в нем есть хотя бы одно статическое поле
Сценарий PHP содержит следующий код:
<?php
interface iMyInterface
{
public $Data;
function func();
}
class cImpl implements iMyInterface
{ function func(){return $this->Data;} }
$foo = new cImpl; $foo->Data = 1;
echo $foo->func();
?>
Укажите результат выполнения сценария:
(1) 1
(2) 0
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface i1
{ function func1(); }
interface i2
{ function func2(); }
class cFoo implements i1,i2
{
function func1(){echo 1;}
function func2(){echo 2;}
}
$foo = new cFoo;
$foo->func1();$foo->func2();
?>
Укажите результат выполнения сценария:
(1) 12
(2) 1
(3) 2
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iMyInterface
{ function func(); }
___
{
protected $D;
function __construct($_D){$this->D = $_D;}
}
class cBar extends cFoo
{ function func(){echo $this->D;} }
$foo = new cBar(12);
$foo->func();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "24":
(1) class cFoo implements iMyInterface
(2) class cFoo extends iMyInterface
(3) abstract class cFoo implements iMyInterface
(4) abstract class cFoo extends iMyInterface
Файл main.php подключает файлы add1.php и add2.php с помощью директивы require
. И add1.php, и add2.php подключают файл base.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы include
. Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
class Foo
{
function __construct(){echo "Foo "; }
function foo();{return 1;}
}
abstract class Bar extends Foo
{
function __construct(){echo "Bar "; }
abstract function foo();
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new Foo; $b = new Bar; $c = new Foobar;
?>
Укажите результат выполнения сценария:
(1) Foo Bar !Foobar
(2) Foo Bar
(3) !Foo Bar !Foobar
(4) Bar
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$reader = new cReader;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему символа "c", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.". $_class.".php")
(2) require_once( "class.". $_class.".php")
(3) require_once( "class.".substr($_class,1).".php")
(4) решение поставленной задачи невозможно
Функциональность, описанная в определенном в методе класса __set()
будет задействована:
(1) при каждой попытке изменить значение любого поля класса или константы (существующих или несуществующих)
(2) при каждой попытке изменить значение любого поля класса (существующего или несуществующего)
(3) при каждой попытке изменить значение несуществующего поля класса или несуществующей константы
(4) при каждой попытке изменить значение несуществующего поля класса
(5) при каждой попытке изменить значение несуществующего или недоступного в контексте обращения поля класса
Сценарий PHP содержит следующий код:
<?php
class cBar
{
public $s = "F";
function __call($_name,$_args){$this->s.="o"; echo " ".$this->s." ";}
}
$bar = new cBar();
echo $bar->s." ".$bar->z()." ".$bar->x()." ".$bar->v()." ".$bar->s." ".$bar->s;
?>
Укажите результат выполнения сценария:
(1) F Fo Foo Fooo Fooo Fooo
(2) Fo Foo Fooo F Fooo Fooo
(3) F Fooo Foooo
(4) F Fooo Fooo
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cBar
{
public $a = "public1"; protected $b = "protected2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$bar = new cBar();
$bar->a = "public2";
$bar->b = "protected2";
$bar->c = "empty";
?>
Укажите результат выполнения сценария:
(1) |a = "public2"||b = "protected2"||c = "empty"|
(2) |b = "protected2"||c = "empty"|
(3) |c = "empty"|
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cBar
{
private $Props = array("p1" => "23", "p2" => "12");
function __construct ($_p1, $_p2)
{
$this->p1 = $_p1;
$this->p2 = $_p2;
}
function __set($_name, $_value) {$this->Props[$_name] = $_value;}
function __get($_name) {return $this->Props[$_name];}
}
$a = new cBar(1,2);
$a->p1 += 12;
$a->p2--;
echo $a->p1," ",$a->p2;
?>
Укажите результат выполнения сценария:
(1) 35 11
(2) 12 -1
(3) 13 1
(4) 1 2
(5) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить, является ли некоторая функция внутренней (internal
), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
if(___)
echo "Функция ".$_name."() является внутренней";
else
echo "Функция ".$_name."() не является внутренней";
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->isInternal
(2) $refl->isInternal()
(3) $refl->is_internal
(4) $refl->is_internal()
С целью определить, являются ли параметры некоторой функции массивами (что указано при ее определении), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
if(__2__)
{
echo "Параметр №".$param_num." функции ";
echo $_name."() является массивом<br>";
}
else
{
echo "Параметр №".$param_num." функции ";
echo $_name."() массивом не является<br>";
}
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->isArray
(2)
__1__ => $refl->getParameters()
__2__ => $param->isArray()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->is_array()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->is_array
В классе определено одно свойство, имеющее модификатор доступа public
, и одно, имеющее модификатор доступа protected
. Для класса используется механизм итерации по умолчанию. Цикл, построенный на использовании foreach
, даст доступ
(1) и к public
, и к protected
свойствам
(2) только к public
свойству
(3) только к protected
свойству
(4) ни к одному свойству доступ не будет предоставлен
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { $this->OperationCount++; reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { $this->OperationCount++; return next($this->Contents); }
public function valid() { return ($this->current() !== false); }
}
$foo = new cFoo(array( 1, 2,3,4)); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 4
(2) 5
(3) 6
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); $this->Contents[0].="a"; }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); }
public function next() { return next($this->Contents); }
public function valid() { $this->Contents[key($this->Contents)].="b";
return ($this->current() !== false); }
}
$foo = new cFoo(array("1","2","3","4")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) 1
(2) 1a
(3) 1b
(4) 1ab
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset){ return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) { return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) { $this->OperationCount++;
unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] = "val1"; $foo["bar2"] .= "val2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 2
(2) 1
(3) 0
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Код, расположенный в try
-блоке перед throw
:
(1) никогда не выполняется
(2) выполняется только если исключение было поймано
(3) выполняется всегда
(4) выполняется или нет в зависимости от типа сгенерированного исключения
Сценарий PHP содержит следующий код:
<?php
function a(){echo "c "; b(); echo "f ";}
function b(){echo "d "; throw new Exception("test"); echo "e ";}
echo "a ";
try
{
echo "b "; a(); echo "g ";
}
catch (Exception $e) {echo "h ";}
echo "i ";
?>
Укажите результат выполнения сценария:
(1) a b c d e f g h i
(2) a b c d e h i
(3) a b c d e f g h i
(4) a b c d h i
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getMessage()
:
<?php
class eMyException extends Exception
{
function getMessage()
{return "Исключение: ".$this->message;}
}
try {throw new eMyException("test");}
catch (Exception $e){echo $e->getMessage();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Исключение: тест", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля message
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getMessage()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("test");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";
Если в классе определен конструктор без параметров, а при создании экземпляра параметры были указаны, то:
(1) будет сгенерирована ошибка
(2) будет сгенерировано предупреждение, экземпляр будет создан
(3) будет сгенерировано предупреждение, экземпляр создан не будет
(4) экземпляр будет корректно создан
К константам, определенным в некотором классе, следует обращаться как:
(1) $имя_экземпляра_класса -> имя_константы
(2) $имя_экземпляра_класса :: имя_константы
(3) имя_класса -> имя_константы
(4) имя_класса -> имя_константы
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
function ~cFoo() {echo "был вызван деструктор";}
function cFoo() {echo "|был вызван конструктор|";}
}
$bar = new cFoo();
?>
Укажите результат выполнения сценария:
(1) |был вызван конструктор|
(2) |был вызван конструктор|был вызван деструктор
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для вывода названия города бы разработан следующий код:
<?php
class cCityName
{
const CITY_NAME = "Москва";
}
$foo = new cCityName();
echo $foo.CITY_NAME;
?>
В процессе выполнения сценария происходит ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности кода:
(1) константу следует объявить как public
для предоставления доступа к ней извне класса
(2) PHP не поддерживает возможность объявления константы внутри класса
(3) для доступа к константам внутри объекта следует использовать не " -> "
, а " . "
(4) для доступа к константам внутри объекта следует использовать не " -> "
, а " :: "
(5) значение константы, объявленной в классе, не может быть получено через экземпляр этого класса - следует обращаться к нему как " имя_класса::имя_константы"
Был разработан код класса, заменяющий стандартный тип Array
. Код сценария, тестирующего работу нового класса:
<?php
class cNewArray
{
private $Num = 0;
function __construct($_Num){$this->Num = $_Num;}
/*…методы и поля, описывающие новую функциональность…*/
}
$foo = new cNewArray(2);
echo $foo->Num;
?>
Укажите результат выполнения сценария:
(1) 12
(2) пустая строка
(3) 0
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Для разрешения доступа к полю из любой области видимости используется модификатор
(1) protected
(2) closed
(3) public
(4) private
Сценарий PHP содержит следующий код:
<?php
$a = 1;
$b = 2;
echo $c += ($a += (int) 14.5/5) + ($b -= (2 + 1) % - 3);
?>
Укажите результат выполнения сценария:
(1) закрытый защищенный
(2) защищенный
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected $protected = "защищенный";
private $private = "закрытый";
function GetContents(){return $this->protected." ".$this->private;}
}
$foo = new cFoo();
echo $foo->GetContents()." ".$foo->protected." ".$foo->private;
?>
Укажите результат выполнения сценария:
(1) защищенный закрытый защищенный закрытый
(2) защищенный закрытый закрытый
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo
{
protected function GetProtected(){echo "защищенный ";}
private function GetPrivate(){echo "закрытый ";}
function GetAll(){$this->GetProtected();$this->GetPrivate();}
}
$foo = new cFoo();
$foo->GetAll();$foo->GetPrivate();
?>
Укажите результат выполнения сценария:
(1) защищенный закрытый закрытый
(2) защищенный закрытый
(3) пустая строка
(4) фатальная ошибка
Чтобы сохранить доступность метода в производных классах, не запрещая его переопределение, следует:
(1) объявить метод как protected
(2) объявить метод как public
(3) объявить метод как final
(4) объявить метод как closed
Сценарий PHP содержит следующий код:
<?php
class cBar1
{
public $publ = "открытый"; public $prot = "защищенный";
private function priv(){return "закрытый";}
}
class cBar2 extends cBar1
{
function View() { echo $this->publ." ".$this->prot." ".$this->priv(); }
}
$foo = new cBar2;
$foo->View();
?>
Укажите результат выполнения сценария:
(1) открытый защищенный закрытый
(2) открытый защищенный
(3) пустая строка
(4) фатальная ошибка
Для расширения функциональности класса cExample
был разработан класс cExampleAdvanced
. Конструктор нового класса не изменяет способ генерации значений полей родителя при создании объекта, поэтому было принято решение повторно использовать старый код. Содержимое файла class.Example.php:
<?php
class cExample
{
/*базовая функциональность*/
public $OK; protected $LessonNum; private $ExampleString;
function __construct($_LessonNum,$_ExampleString)
{
if($_LessonNum<1)
{
$this->LessonNum = 1;
$this->OK = "Wrong lesson number, set to 1st";
}
else
$this->LessonNum = $_LessonNum;
$this->ExampleString = $_ExampleString;
}
}
class cExampleAdvanced extends cExample
{
/*расширенная функциональность*/
protected $Hints;
function __construct($_LessonNum,$_ExampleString,$_Hints)
{
___;
$this->Hints = $_Hints;
}
}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $this->__construct($_LessonNum,$_ExampleString)
(2) $parent->__construct($_LessonNum,$_ExampleString)
(3) parent::__construct($_LessonNum,$_ExampleString)
(4) self:: __construct($_LessonNum,$_ExampleString)
(5) решение поставленной задачи невозможно, так как поле с модификатором доступа private
в родительском классе недоступно из производного класса
Сценарий PHP содержит следующий код:
<?php
class cParent
{
protected function func() {echo "родитель";}
}
class cChild extends cParent
{
function func() {echo "потомок";}
}
$der = new cChild;
$der->func();
?>
Укажите результат выполнения сценария:
(1) родитель
(2) потомок
(3) пустая строка
(4) сценарий не будет выполнен, т.к. код содержит ошибки
Если в классе объявлен абстрактный метод, то
(1) класс также следует объявить абстрактным
(2) класс можно объявить абстрактным, в обратном случае будет сгенерировано предупреждение
(3) класс необязательно объявлять абстрактным
(4) класс следует объявить абстрактным либо определить тело этого метода
Абстрактное поле объявляется с помощью ключевого слова
(1) abstract
(2) virtual
(3) sealed
(4) в PHP не существует абстрактных полей классов
Сценарий PHP содержит следующий код:
<?php
abstract class cFoo
{
abstract function bar() {echo "bar";}
}
$foo = new cFoo;
$foo->bar();
?>
Укажите результат выполнения сценария:
(1) bar
(2) пустая строка
(3) cценарий не будет выполнен, т.к. создание экземпляра абстрактного класса недопустимо и приведет к фатальной ошибке
(4) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
abstract function ShowData();
}
class cDerivative1 extends cBase
{ function ShowData(){return $this->Data."-";} }
class cDerivative2 extends cBase
{ function ShowData(){return $this->Data."0";} }
$foo = new cDerivative1(1); $bar = new cDerivative2(7);
echo $foo->ShowData().$bar->ShowData().$foo->ShowData().$bar->ShowData();
?>
Укажите результат выполнения сценария:
(1) 1-701-70
(2) 7-107-10
(3) -0-0
(4) 0-0-
(5) cценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Сценарий PHP содержит следующий код:
<?php
abstract class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "this is ".$this->Data;} }
$foo = new cDerivative(11);
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) this is 34
(2) this is 0
(3) this is
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
(5) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
virtual class cBase
{
protected $Data;
function __construct($_Data){$this->Data = $_Data;}
virtual function ShowData();
}
class cDerivative extends cBase
{ function ShowData(){return "I am a ".$this->Data;} }
$foo = new cDerivative("programmer");
echo $foo->ShowData();
?>
Укажите результат выполнения сценария:
(1) I am a programmer
(2) I am a
(3) пустая строка
(4) сценарий не будет выполнен, т.к. в PHP нет ключевого слова virtual
(5) сценарий не будет выполнен, т.к. в PHP нет ключевого слова abstract
Из приведенных ниже высказываний укажите истинное:
(1) механизм интерфейсов в PHP поддерживает множественное наследование
(2) механизм интерфейсов в PHP множественного наследования не поддерживает, в отличие от абстрактных классов
(3) механизм интерфейсов в PHP поддерживает множественное наследование только в случае, если все предки являются производными одного и того же интерфейса
(4) механизм множественного наследования в PHP отсутствует
Сценарий PHP содержит следующий код:
<?php
interface iInterface
{
public $D;
function f ();
}
class cBar implements iInterface
{ function f (){return $this->D;} }
$foo = new cBar; $foo->D = "данные";
echo $foo->f();
?>
Укажите результат выполнения сценария:
(1) данные
(2) NULL
(3) пустая строка
(4) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iInterface1
{ function f1(); }
interface iInterface2
{ function f2(); }
class cFoo implements iInterface1,iInterface2
{
function f1(){echo "интерфейс ";}
function f2(){echo "реализован";}
}
$foo = new cFoo;
$foo->f1();$foo->f2();
?>
Укажите результат выполнения сценария:
(1) интерфейс реализован
(2) интерфейс
(3) реализован
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
interface iInterface
{ function f (); }
___
{
protected $D;
function __construct($_D){$this->D = $_D;}
}
class cBar extends cFoo
{ function f (){echo $this->D;} }
$foo = new cBar("интерфейс реализован");
$foo->f ();
?>
Среди приведенных ниже фрагментов укажите все варианты кода, при подстановке которого вместо знаков подчеркивания результатом сценария будет строка "интерфейс реализован":
(1) class cFoo implements iInterface
(2) class cFoo extends iInterface
(3) abstract class cFoo implements iInterface
(4) abstract class cFoo extends iInterface
Файл main.php подключает файлы first.php и second.php с помощью директивы include_once
. И first.php, и second.php подключают файл third.php (содержащий некоторый набор констант и часто используемых функций) с помощью директивы include
. Во время выполнения сценария main.php:
(1) все будет работать так, как предполагалось
(2) будет сгенерировано предупреждение (warning)
(3) будет сгенерирована фатальная ошибка
(4) не будет сгенерировано ни предупреждения, ни ошибки, однако "общий" файл не будет подключен
Сценарий PHP содержит следующий код:
<?php
class First
{
function __construct(){echo "First "; }
}
class Second extends First
{
function __construct(){echo "Second "; }
}
function __autoload($_class)
{ echo " !".$_class." ";}
$a = new First; $b = new Second; $c = new Third;
?>
Укажите результат выполнения сценария:
(1) First Second !Third
(2) First Second
(3) пустая строка
(4) фатальная ошибка
Сценарий PHP содержит следующий код:
<?php
function __autoload($_class)
{
___;
}
$a = new c_SomeClass;
?>
Код является частью проекта, в котором договоренности именования установлены следующим образом: имена классов состоят из собственно названия класса и предшествующего ему "c_", и для каждого класса есть файл, содержащие полное определение этого класса, причем имя файла имеет вид "class.название_класса.php". Среди приведенных ниже фрагментов укажите вариант кода, при подстановке которого вместо знаков подчеркивания сценарий будет работать корректно в соответствии с вышеуказанными условиями:
(1) require ( "class.". $_class.".php")
(2) require_once( "class.". $_class.".php")
(3) require_once( "class.".substr($_class,2).".php")
(4) решение поставленной задачи невозможно
Если во внешней области видимости происходит попытка получить значение private поля класса, метод __get()
которого определен:
(1) вызова __get()
не произойдет, будет сгенерирована ошибка
(2) произойдет вызов __get()
, ошибки сгенерировано не будет
(3) ничего не произойдет
(4) произойдет вызов __get()
, будет сгенерировано предупреждение
Сценарий PHP содержит следующий код:
<?php
class A
{
public $s =1;
function __call($_name,$_args){$this->s++; echo " ".$this->s." ";}
}
$a = new A();
echo $a->s." ".$a->s." ".$a->x()." ".$a->s." ".$a->s." ".$a->z();
?>
Укажите результат выполнения сценария:
(1) 2 3 1 1 2 2
(2) 1 1 2 2 2 3
(3) 1 1 1 1
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class C
{
public $a = "открытый1"; private $b = "закрытый2";
function __set($_name,$_value){echo "|".$_name." = ".$_value."|";}
}
$bar = new C();
$bar->a = "открытый2";
$bar->b = "закрытый2";
$bar->c = "несуществующий";
?>
Укажите результат выполнения сценария:
(1) |a = "открытый2"||b = "закрытый2"||c = "несуществующий"|
(2) |b = "закрытый2"||c = "несуществующий"|
(3) |c = "несуществующий"|
(4) пустая строка
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class C
{
private $Props = array("p1" => 54, "p2" => 3);
function __construct ($_p1, $_p2)
{
$this->p1 = $_p1;
$this->p2 = $_p2;
}
function __set($_name, $_value) {$this->Props[$_name] = $_value;}
function __get($_name) {return $this->Props[$_name];}
}
$c = new C(1,2);
$c->p1 -= 3;
$c->p2++;
echo $c->p1," ",$c->p2;
?>
Укажите результат выполнения сценария:
(1) 51 4
(2) -3 1
(3) -2 3
(4) 1 2
(5) сценарий не будет выполнен, т.к. код содержит ошибки
С целью определить, является ли некоторая функция определенной пользователем (user defined
), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth"); // название тестируемой функции
include "func.".FUNCTION_NAME.".php";// файл, содержащий определение
// тестируемой функции
function ReflectFunctionResult($_name)
{
$refl = new ReflectionFunction($_name);
if(___)
echo "Функция ".$_name."() является определенной пользователем";
else
echo "Функция ".$_name."() не является определенной пользователем";
}
ReflectFunctionResult(FUNCTION_NAME);
?>
Среди приведенных ниже фрагментов укажите вариант кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) $refl->isUserDefined
(2) $refl->isUserDefined()
(3) $refl->is_user_defined
(4) $refl->is_user_defined()
С целью определить, являются ли параметры некоторой функции опциональными (что указано при ее определении), был разработан код, пример применения которого выглядит следующим образом:
<?php
define("FUNCTION_NAME","GetSmth");//название тестируемой функции
include "func.".FUNCTION_NAME.".php";//файл с ее определением
function ReflectFunctionParams($_name)
{
$refl = new ReflectionFunction($_name);
foreach(__1__ as $param_num => $param)
{
if(__2__)
{
echo "Параметр №".$param_num." функции ";
echo $_name."() является опциональным<br>";
}
else
{
echo "Параметр №".$param_num." функции ";
echo $_name."() опциональным не является<br>";
}
}
}
ReflectFunctionParams(FUNCTION_NAME);
?>
Среди приведенных ниже пар фрагментов укажите пару, подстановка которой вместо знаков подчеркивания решит поставленную задачу:
(1)
__1__ => $refl->getParameters()
__2__ => $param->isOptional
(2)
__1__ => $refl->getParameters()
__2__ => $param->isOptional()
(3)
__1__ => $refl->get_parameters()
__2__ => $param->is_optional()
(4)
__1__ => $refl->get_parameters()
__2__ => $param->is_optional
В классе определено одно свойство, имеющее модификатор доступа public
, и одно, имеющее модификатор доступа private
. Для класса используется механизм итерации по умолчанию. Цикл, построенный на использовании foreach
, даст доступ
(1) и к public
, и к private
свойствам
(2) только к public
свойству
(3) только к private
свойству
(4) ни к одному свойству доступ не будет предоставлен
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
private $Contents = array(); public $OperationCount = 0;
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { $this->OperationCount++; return key($this->Contents); }
public function next() { $this->OperationCount++; return next($this->Contents); }
public function valid() { return ($this->current() !== false); }
}
$foo = new cFoo(array( 1, 2,3,4)); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 4
(2) 5
(3) 8
(4) 10
(5) сценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements Iterator
{
public $Contents = array();
public function __construct($_Contents) { $this->Contents = $_Contents; }
public function rewind() { reset($this->Contents); }
public function current() { return current($this->Contents); }
public function key() { return key($this->Contents); $this->Contents[0].="1";}
public function next() { return next($this->Contents); }
public function valid() { $this->Contents[key($this->Contents)].="2";
return ($this->current() !== false); }
}
$foo = new cFoo(array("1","2","3","4")); $temp = 0;
foreach ($foo as $bar) { $temp++; }
echo $foo->Contents[0];
?>
Укажите результат выполнения сценария:
(1) 1
(2) 11
(3) 12
(4) 112
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Сценарий PHP содержит следующий код:
<?php
class cFoo implements ArrayAccess
{
protected $Contents = array(); public $OperationCount = 0;
public function offsetExists($_offset){ return isset($this->Contents[$_offset]); }
public function offsetGet($_offset) { return $this->Contents[$_offset]; }
public function offsetSet($_offset,$_value){ $this->OperationCount++;
$this->Contents[$_offset] = $_value;}
public function offsetUnset($_offset) { $this->OperationCount++;
unset($this->Contents[$_offset]); }
}
$foo = new cFoo;
$foo["bar1"] = "value1"; $foo["bar2"] .= "value2";
echo $foo->OperationCount;
?>
Укажите результат выполнения сценария:
(1) 2
(2) 1
(3) 0
(4) пустая строка
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Код, расположенный в try
-блоке после throw
:
(1) никогда не выполняется
(2) выполняется только если исключение было поймано
(3) выполняется всегда, причем после выполнения блока catch
(4) выполняется только, причем до выполнения блока catch
Сценарий PHP содержит следующий код:
<?php
function a(){echo "f "; b(); echo "g ";}
function b(){echo "d "; throw new Exception("test"); echo "s ";}
echo "2 ";
try
{
echo "b "; a(); echo "g ";
}
catch (Exception $e) {echo "1 ";}
echo "h ";
?>
Укажите результат выполнения сценария:
(1) 2 b f d 1 s g g h
(2) 2 b f d s g g 1 h
(3) 2 b f d 1
(4) 2 b f d 1 h
(5) cценарий не будет выполнен, т.к. код содержит ошибки
Был разработан специализированный класс исключений, расширяющий информативность метода getCode()
:
<?php
class eNewException extends Exception
{
function getCode()
{return "Exception code: ".$this->code;}
}
try {throw new eNewException("test");}
catch (Exception $e){echo $e->getCode();}
?>
Ожидалось, что результатом выполнения сценария станет строка "Exception code: 0", однако в процессе выполнения сценария была сгенерирована фатальная ошибка. Из приведенных высказываний укажите высказывание, раскрывающее причину некорректности работы программы:
(1) в производном классе не был определен конструктор
(2) класс Exception
не содержит поля code
(3) типом аргумента блока catch
следует указать производный класс, а не родительский
(4) метод getCode()
переопределить нельзя, т.к. он определен как final
Для вывода наиболее полной информации о пойманном исключении был разработан следующий код:
<?php
try {throw new Exception("исключение");}
catch (Exception $e){____;}
?>
Среди приведенных ниже фрагментов укажите все варианты кода, подстановка которого вместо знаков подчеркивания решит поставленную задачу:
(1) echo "<pre>".$e->__toString()."</pre>"
(2) echo "<pre>".$e."</pre>"
(3) echo "<pre>".(string)$e."</pre>"
(4) echo "<pre>".$e->getFullInfo()."</pre>";