繁体   English   中英

Laravel-在控制器中使用$ this关键字调用类的成员函数

[英]Laravel - Calling member function of class using $this keyword in controller

我在Laravel中有一个Event类作为Controller类。 这是名称空间。

namespace App\Http\Controllers\Admin;

这是类的起始代码和构造函数。

class EventController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */

    public function __construct()
    {
        $this->middleware('auth');
    }

这是函数名称和定义

    function generateBarcodeNumber() {
    $number = mt_rand(1000000000, 9999999999); // better than rand()

    // call the same function if the barcode exists already
    if (barcodeNumberExists($number)) {
        return generateBarcodeNumber();
    }

    // otherwise, it's valid and can be used
    return $number;
}

function barcodeNumberExists($number) {
    // query the database and return a boolean
    // for instance, it might look like this in Laravel
    return User::whereBarcodeNumber($number)->exists();
}

我在另一个函数中使用$this关键字将此函数称为

$event->slug_str = $this->generateBarcodeNumber();

这是错误:

调用未定义的函数App \\ Http \\ Controllers \\ Admin \\ barcodeNumberExists()

谢谢!

$this是类实例变量。 它在静态范围内不可用。

class AcmeEvent
{
    public slug_str;
}

class AcmeBarcodeEventGenerator 
{
    public function generateEvent()//: AcmeEvent
    {
        $e = new AcmeEvent();
        $e->slug_str = $this->generateBarcodeNumber();

        return $e;
    }

    public function generateBarcodeNumber()//: int
    {
        return mt_rand(1000000000, 9999999999);
    }
}

$generator = new AcmeBarcodeEventGenerator();
$e = $generator->generateEvent();
die(var_dump($e)); // Will stop executing script and dump the event instance.

如果要在类范围之外使用类函数(方法),请像这样使用它。

$e = new AcmeEvent();
$e->slug_str = (new AcmeBarcodeEventGenerator())->generateBarcodeNumber();

die(var_dump($e)); // Will stop executing script and dump the event instance.

查看此问题和答案


看来您正在调用一个名为barcodeNumberExists的函数。 它不是类方法的调用。 PHP表示您正在调用未定义的函数。 这是你的问题。 如果是方法名; 明确一点。 像: $this->barcodeNumberExists() 除此以外; php fill尝试在名称空间而不是类中查找函数。 您来自Java吗?


在问题编辑后添加。

public function generateBarcodeNumber() {
    $number = mt_rand(1000000000, 9999999999); // better than rand()

    // call the same function if the barcode exists already
    if ($this->barcodeNumberExists($number)) {
        return $this->generateBarcodeNumber();
    }

    // otherwise, it's valid and can be used
    return $number;
}

private function barcodeNumberExists($number) {
    // query the database and return a boolean
    // for instance, it might look like this in Laravel
    return User::whereBarcodeNumber($number)->exists();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM