gpt4 book ai didi

具有可变类名和命名空间的 PHP 静态方法调用

转载 作者:可可西里 更新时间:2023-10-31 23:07:25 26 4
gpt4 key购买 nike

我正在尝试从另一个具有相同命名空间的类调用一个命名空间类的静态方法。但是另一个类的名称包含在一个变量中:

<?php 

namespace MyApp\Api;
use \Eloquent;

class Product extends Eloquent {

public static function find($id)
{
//....
}

public static function details($id)
{
$product = self::find($id);
if($product)
{
$type = $product->type; // 'Book'
$product = $type::find($product->id);
return $product;
}
}
}

这是 Book 类:

<?php

namespace MyApp\Api;
use \Eloquent;

class Book extends Eloquent {

public static function find($id)
{
//....
}

}

我的类型变量在 Book 处包含一个有效的类名。此类位于同一文件夹中,并使用相同的命名空间。此代码返回错误 Class 'Book' not found。我已经使用反斜杠或 call_user_func 函数尝试了几种变体(来 self 发现的 SO 问题),但没有任何效果。任何人都知道出了什么问题?

最佳答案

当使用变量引用您的类时,您需要使用完全限定的名称。试试这个...

$type = __NAMESPACE__ . '\\' . $product->type;
$product = $type::find($product->id);

关于具有可变类名和命名空间的 PHP 静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com