我在Laravel 5.2中有这个代码,它检查给定的db表名($ what)是否有自己的Model:
public function manage($what) {
$model = Str::studly(Str::singular($what));
if (!is_subclass_of($model, 'Model')) {
\App::abort(404);
}
/* [... other stuff ...] */
}
Run Code Online (Sandbox Code Playgroud)
问题是is_subclass_of总是失败,当模型存在并且它是Model的子类时也是如此.我想这是命名空间问题,我该如何解决?
以下代码是否违反某些OOP原则/模式?
我尤其对Vehicle :: whatCanDo()方法中的instanceof检查感兴趣,该检查检查子类是否构成特定接口。
乍一看,它似乎违反了Liskov原则,但实际上并没有违反,因为Airplane和Car类仍然可以互换。
abstract class Vehicle {
public function whatCanDo() {
if ($this instanceof CanFly) {
echo "can fly";
}
}
}
interface CanFly {
}
class Airplane extends Vehicle implements CanFly {
}
class Car extends Vehicle {
}
Run Code Online (Sandbox Code Playgroud)