php - 使用数组作为动态对象实例的查找
问题描述
以下 PHP 用于 JavaScript 文件进行的 AJAX 调用。
首先,基础类 -
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';
}
}
现在,由两个单独的 JS 文件共享并调用方法的 PHP -
// $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 脚本只询问名称和边,从不询问半径。同样,circle 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()
. 这可以解决吗?如果可以,如何解决?
解决方案
只需为方法不存在的情况添加一个魔术方法。
也将其添加到三角形
<?php
class Circle
{
public function __call($name, $arguments)
{
return '';
}
public function GetName()
{
return 'name is circle';
}
public function GetRadius()
{
return 'radius is nonsense';
}
}
此处有关重载的 PHP 文档
推荐阅读
- android - 将json传递给cakephp后端android studio
- c# - C# Ninjascript - NinjaTrader 8 (NT8) - 获取事件时间和日期的代码,然后在文本框中的图表上显示
- python - 使用 pycharm 在 googlemaps 上绘图
- python - RuntimeError:无法使用来自“CPU”后端的参数运行“aten::to_dense”
- python - 连胜数低于 0
- ansible - 在ansible中获取已安装包列表和所需包列表之间的差异列表
- python - python:从文本文件创建字典:输入短文本并返回长文本
- python - 以键值格式加载 apache_superset 中的 json 数据
- ansible - 如何从ansible列表中过滤e过滤器字符串
- flutter - 如果使用 Getx,如何构建 Navigator()?