我正在嘗試使用一些希望可重用的代碼在PHP中動(dòng)態(tài)運(yùn)行不同的類,但是我很難找到正確的方法來做到這一點(diǎn)。目前,我正在運(yùn)行一個(gè)POST請求,數(shù)據(jù)流動(dòng)如下:Route::post('/user/create', 'UserController@createItem');到用戶控制器:namespace App\Http\Controllers;use Illuminate\Cache\Repository;use App\Models\User;class UserController extends AbstractController{ const className = 'User';}和摘要控制器:<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use GuzzleHttp\Exception\RequestException;use App\Models\User;class AbstractController extends Controller{ public function createItem() { $inputJSON = file_get_contents('php://input'); $this->className::buildItem($inputJSON); return; }}理想情況下,這應(yīng)該調(diào)用一個(gè)靜態(tài)方法,稱為buildItem()當(dāng)我通過硬編碼到抽象控制器中來測試它時(shí),它按預(yù)期工作,但是當(dāng)我嘗試以這種方式執(zhí)行此操作時(shí),我在PostMan中收到錯(cuò)誤:UserErrorException: Undefined property: App\Http\Controllers\UserController::$className in file .../app/Http/Controllers/AbstractController.php on line 14我嘗試過聲明和引用幾種不同的方法,但似乎無法使其起作用。任何幫助是值得贊賞的!className
1 回答

紫衣仙女
TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
由于 在實(shí)現(xiàn)中定義了 ,因此可以通過 使用后期靜態(tài)綁定來訪問它。classNamestatic::className
還需要在模型類的命名空間前面附加。
這將變?yōu)椋?/p>
class AbstractController extends Controller
{
private const MODELS_NAMESPACE = 'App\\Models';
public function createItem()
{
$inputJSON = file_get_contents('php://input');
$className = self::MODELS_NAMESPACE . '\\' . static::className;
$className::buildItem($inputJSON);
}
}
演示:https://3v4l.org/Ng6bl
- 1 回答
- 0 關(guān)注
- 82 瀏覽
添加回答
舉報(bào)
0/150
提交
取消