Следующий PHP используется для вызовов AJAX, выполняемых файлами JavaScript.
Во-первых, базовые классы -
class Triangle
{
public function GetName()
{
return 'name is triangle';
}
public function GetSides()
{
return 'number of sides is three';
}
}
class Circle
{
public function GetName()
{
return 'name is circle';
}
public function GetRadius()
{
return 'radius is nonsense';
}
}
Теперь PHP, который используется двумя отдельными файлами JS и вызывает методы -
// $caller = 'triangle';
// $action = 'name';
// $action = 'sides';
$caller = 'circle';
// $action = 'name';
$action = 'radius';
$objects = [
'triangle' => new Triangle(),
'circle' => new Circle()
];
$object = $objects[$caller];
if ($action == 'name'):
$data = $object->GetName();
elseif ($action == 'sides'):
$data = $object->GetSides();
elseif ($action == 'radius'):
$data = $object->GetRadius();
endif;
echo $data;
Как это в настоящее время настроено (для включенных строк выше) это повторяется: radius is nonsense
. JS-скрипт треугольника всегда запрашивает только имя и стороны, а не радиус. Точно так же JS-скрипт окружности всегда запрашивает только имя и радиус, а не стороны. Итак, это работает. Однако я пытаюсь использовать массив в качестве поиска для замены блока кода IF следующим образом:
$array = [
'name' => $object->GetName(),
'sides' => $object->GetSides(),
'radius' => $object->GetRadius()
];
$data = $array[$action];
echo $data;
Но это приводит к Fatal error: Call to undefined method Circle::GetSides()
. Можно ли это исправить, и если да, то как?
2 ответа
Просто добавьте волшебный метод для случая отсутствия метода.
Также добавьте это в треугольник
<?php
class Circle
{
public function __call($name, $arguments)
{
return '';
}
public function GetName()
{
return 'name is circle';
}
public function GetRadius()
{
return 'radius is nonsense';
}
}
Документы PHP по перегрузке здесь
Альтернативный подход, который, кажется, работает, использует method_exists () в поисковом массиве, например:
$array = [
'name' => method_exists($object, 'GetName') ? $object->GetName() : '',
'sides' => method_exists($object, 'GetSides') ? $object->GetSides() : '',
'radius' => method_exists($object, 'GetRadius') ? $object->GetRadius() : ''
];
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.