iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

PHP 沿途的風景系列 第 17

[Day 17] Laravel 的 XXXResource::make() 的 make() 作用 - 我以為的 static

  • 分享至 

  • xImage
  •  

Laravel 的 XXXResource::make() 的 make() 作用 - 我以為的 static

我以為我知道 PHP 的 static 在做哪些事,顯然,我知道的 static 還不夠,自從我看到 Laravel 的 XXXResource::make() 的 make(),瞬間不知道為什麼 make() 結果會是 Create a new resource instance. 如:

<?php
class JsonResource {
    /*
     * Create a new resource instance.
     */   
    public static function make(...$parameters)
        {
            return new static(...$parameters);
        }
    // ...略
}

回想 static 用法

  • 我以前的認知裡,static 用在 function 裡面的 variable 例如:
    • variable $number 在 第一次 add() 時,被初始化
    • 之後每次 add() 都會输出 $number 的值並加 1
<?php
function add(){
    static $number = 0;
    echo $number;
    $number++;
}

add(); // 0
add(); // 1
  • 我以前的認知裡,static 用在 class 裡面的 method 例如:
    • class 要用 static 的 method 時,操作符號要是 (::); 不能使用 (->)
<?php
class Cat {
    public static function mew(){
        echo 'mew!';
    }
}

Cat::mew(); // mew!
  • 我以前的認知裡,static 用在 class 裡面的 define static property 例如:
    • class Animal 的 say() 的 echo self::$verb;$verb 是 class Animal 的 static property,class Animal 的 function say() 使用 static property,必須加上 self:: ; 而不是 $this->
    • class Animal, class Dog 可以透過 :: 使用 static property,例如 Animal::$verbDog::$verb
    • 子類別 (class Dog) 的 function won() 用父類別 (class Animal) 的 static property,要用 parent:: 取得 父類別 (class Animal) 的 static property
<?php
class Animal{
  public static $verb = 'won';

  public $action = 'say';
  public function say(){
    echo self::$verb;
  }

}
echo Animal::$verb; // won
$kiki = new Animal();
$kiki->say(); // won

echo $kiki->action; // say


class Dog extends Animal {

  public function won(){
      echo parent::$verb;
  }
}
$akita = new Dog();
$akita->won(); // won
echo Dog::$verb; // won

結語

我以為的 static 是從 PHP 文件的 Static Keyword 取得知識,下篇文章講解關鍵字 static 的另一種用法 Late Static Bindings,暸解 Late Static Bindings 後,make() 就會迎刃而解。


參考文章

1 Static Keyword


上一篇
[Day 16] 自制 Laravel helper response function
下一篇
[Day 18] Laravel 的 XXXResource::make() 的 make() 作用 - Late Static Bindings
系列文
PHP 沿途的風景30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言