【问题标题】:Laravel 5.1: Calling a function from stringLaravel 5.1:从字符串调用函数
【发布时间】:2016-04-19 18:09:34
【问题描述】:

目前我正在尝试从字符串中调用函数。

这是我稍后会调用的函数:

<?php
namespace App\Validation\Options;

class FacebookOptionValidation
{
    static public function validate()
    {
       echo: 'example';
       die();
    }
}

这是我的控制器:

<?php
namespace App\Http\Controllers\Profile;

use App\Validation\Options;

class ProfileUserEditController extends Controller {

    public function updateUserOption()
    {
        $class = 'Options\FacebookOptionValidation';

        $class::validate();
    }
}

在这种情况下,Laravel 显示错误: 找不到类“Options\FacebookOptionValidation”

但是当我这样调用我的函数时,一切正常:

use App\Validation\Options;

class ProfileUserEditController extends Controller {

    public function updateUserOption()
    {
        Options\FacebookOptionValidation::validate();
    }
}

here 所述,可以从字符串调用类/函数。但就我而言,这是不可能的——无论是静态还是非静态变体。

那是“laravel 的东西”吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.1


    【解决方案1】:

    使用 PHP7 你甚至可以这样做:

    (App\Validation\Options\FacebookOptionValidation::class)::validate();
    

    一行代码,不使用字符串

    【讨论】:

    • 感谢您的提及。但是,此时需要该字符串,因为我开发了一个可以通过 ACP 管理的灵活系统 :)
    • @FlorianLauterbach:好的。也许它对其他读者有用:)
    【解决方案2】:

    尝试使用完整的命名空间调用

        class ProfileUserEditController extends Controller {
    
            public function updateUserOption()
            {
                $class = 'App\Validation\Options\FacebookOptionValidation';
    
                $class::validate();
    
    
             }
    }
    

    【讨论】:

    • 它工作正常,谢谢!你能根据我的例子解释一下,为什么 Options\FacebookOptionValidation::validate();工作正常,而我的字符串变体有问题?
    • @FlorianLauterbach 我认为当 php 解释文件时,它会将命名空间附加到类名。但是当您尝试调用类似字符串时,php 认为它只是一个字符串并且不附加命名空间。这只是一个意见,我可能会误会:)
    猜你喜欢
    • 2016-02-07
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多