我以為我知道 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);
}
// ...略
}
$number
在 第一次 add() 時,被初始化$number
的值並加 1<?php
function add(){
static $number = 0;
echo $number;
$number++;
}
add(); // 0
add(); // 1
::
); 不能使用 (->
)<?php
class Cat {
public static function mew(){
echo 'mew!';
}
}
Cat::mew(); // mew!
echo self::$verb;
的 $verb
是 class Animal 的 static property,class Animal 的 function say()
使用 static property,必須加上 self::
; 而不是 $this->
::
使用 static property,例如 Animal::$verb
或 Dog::$verb
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()
就會迎刃而解。