让我们考虑一下这个Product
模型:
class Product extends Model
{
public function category() {
$this->belongsTo(Category::clas);
}
}
有了Laravel,我有可能:
通过执行
获取Query Builder
的实例
$product = Product::first();
$builder = $product->category()
通过执行
获取类别的实例$product = Product::first();
$category = $product->category
我知道这种获取查询生成器或类别的实例的方式纯粹是PHP
经过一些研究,我发现了__call()
方法,所以我用它如下:
class Cart
{
public function __call($method, $args) {
if($method) {
return true;
}
return false;
}
}
但我无法做到这一点:
$cart = new Cart();
$cart->items
如何管理我的班级才能$cart->items
或$cart->items()
答案 0 :(得分:2)
这是使用magic methods:
完成的class Cart
{
public function __get($name)
{
return "$name property";
}
public function __call($name, $arguments)
{
return "$name method";
}
}
$cart = new Cart;
var_dump($cart->items); // => string(14) "items property"
var_dump($cart->items()); // => string(12) "items method"
这是the demo。
关于Laravel模型,您可以覆盖__get
方法,但一定要在逻辑后添加父方法调用:
public function __get($name)
{
if ($name === 'items') {
// You logic here with an early return.
}
return parent::__get($name);
}