首先让我说我是一名正在学习OOP的中级PHP编码员。我有一个网站正在运行,但我想打破我的代码以实现更灵活的设计模式......并且因为OOP非常棒。
在我的原始代码中,我使用switch
语句来调用与用户请求相对应的函数。
$request = (string) $_GET['fruit'];
switch ($request) {
case 'apply':
Get_Apple();
default:
Error_Not_A_Fruit();
exit;
}
这使得它非常不灵活,要求我在多个位置更改代码,以添加用户可能要求的新选项。
我正在考虑将其更改为Polymorphic类调用。我正在使用作曲家,所以我的对象设置为自动加载PSR-4标准。所以答案似乎很简单,如果用户请求是“apple”,我可以创建
$request = (string) $_GET['fruit'];
$product = new Product\$request;
但是,如果用户手动输入不存在的内容...说“橙色”,我会使用哪种方法来列出用户输入的白名单?就像我说的那样,这是我第一次进入OOP并希望获得你们使用的设计标准。我正在考虑将块封装在try{}
& catch(){}
阻止了,但这是应该做的吗?
任何建议都将不胜感激:)
干杯, 尼鲁
更新:我想更清楚,因为它可能不是以前。我正在寻找这样做的方法,以便可以添加新的子类产品对象(实现产品接口)。这样我就可以添加不同的产品类型而无需在任何地方更改代码。
答案 0 :(得分:1)
嗯,您可以随时使用class_exist('Product\\Apple')
。
class_exists
有两个参数:
该函数返回一个布尔值。
所以你写了
$fullClassName = "Product\\$request";
if(class_exists($fullClassName )) {
$product = new $fullClassName();
}
else {
//error here
}