簡體   English   中英

理解 PHP/Laravel 中的構造函數、$this 關鍵字和控制器類

[英]Understanding Constructor, $this keyword, and controller class in PHP/Laravel

我知道這之前已經被分片討論過,但我正在努力解決如何將它應用到我的代碼中。

我正在 Laravel 中開發一個 PHP 應用程序,但想讓我的代碼更加模塊化和可測試,這意味着將我的邏輯從重型控制器中分離出來,並將它們分離到單獨的文件中,然后從控制器內部調用它們。

在一個這樣的控制器 ( ImageController ) 中,我調用了ImageRepository.php的邏輯,它看起來像這樣:

    <?php
namespace App\Http\Controllers;
use App\Logic\Image\ImageRepository;
use Illuminate\Support\Facades\Input;
class ImageController extends Controller
{
    protected $image;
    public function __construct(ImageRepository $imageRepository)
    {
        $this->image = $imageRepository;
    }
    public function getUpload()
    {
        return view('pages.upload');
    }
    public function postUpload()
    {
        $photo = Input::all();
        $response = $this->image->upload($photo);
        return $response;
    }
    /*public function deleteUpload()
    {
        $filename = Input::get('id');
        if(!$filename)
        {
            return 0;
        }
        $response = $this->image->delete( $filename );
        return $response;
    }
    */
}

我的問題是我不明白這段代碼是如何工作的,因為我是從另一個來源得到的,並且想要理解它,這樣我就可以在我的代碼中的其他地方復制這個架構。

我上傳圖片時的路線是這樣的:

Route::post('upload_image', ['as' => 'upload-post', 'uses'     =>'ImageController@postUpload']);

所以我的第一個問題是,我從來沒有在我的路線中調用構造函數。 postUpload()是正確的。 這是否意味着它沒有目的? 另外,為什么構造函數在ImageRepository$imageRepository之間沒有逗號......根據我對文檔的理解,如果其中一個是布爾值,您只會這樣做?

還有為什么$response = $this->image->upload($photo); postUpload()意味着什么? 該函數upload()來自Repository,是否足夠use以至於它知道該怎么做? 為什么$this->image意味着什么, $this指的是什么? ImageController類? image$this->image源自protected $image

我想我應該在轉向 Laravel 框架之前堅持使用常規 PHP,因為雖然我可以很容易地瀏覽 Laravel 以制作一個有效的應用程序,但它似乎阻礙了我遵循最佳實踐/架構的能力。 AFAIK控制器主要是操作數據並將其發送到視圖或數據庫的東西,我不明白為什么它是一個類?

對不起,我只是很困惑的多個問題。 我在 codeacademy 上自學了 php,但它們的類聲明和對象實例很容易理解,但事實並非如此。 如果有人可以向我解釋代碼,那將非常有幫助。

謝謝!

我從來沒有在我的路線中調用構造函數。 postUpload() 是正確的。 這是否意味着它沒有目的?

創建控制器對象時會自動調用構造函數

為什么構造函數在 ImageRepository 和 $imageRepository 之間沒有逗號...根據我對文檔的理解,如果其中一個是布爾值,您只會這樣做?

ImageRepository不是另一個論點。 它是一個類型提示(或者在 PHP 7 中是一個類型聲明

為什么 $response = $this->image->upload($photo); postUpload() 中有什么意思嗎? 該函數upload() 來自Repository,是否足夠使用以至於它知道該怎么做?

use對於您的控制器能夠使用ImageRepository是必要的。 一旦它在構造函數中加載到你的對象中, $this->image = $imageRepository; ,您的控制器方法可以通過$this->image訪問其方法(例如upload )。

為什么 $this->image 意味着什么,$this 指的是什么?

是的, $this確實指的是ImageController類。 PHP 手冊指出:

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object


$this->image 中的圖像是否來自受保護的 $image?

protected $image設置控制器對象的$image屬性的可見性。 它不會為財產分配任何東西; 這是在構造函數中完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM