欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php new static();

周雨萌1年前6瀏覽0評論

PHP編程中,使用new static();方法創建一個新對象是非常常見的操作。這個方法可以讓你簡單地在類定義中實例化一個對象,所以在開發過程中會經常使用到這個方法。

舉例說明,我們創建一個Animal類和一個Cat類,Cat類擴展Animal類:

class Animal {
public static function create() {
return new static();
}
}
class Cat extends Animal {
public function say() {
echo "Meow!";
}
}

在這里我們定義了一個靜態方法create(),在所有子類中使用該方法都會返回該子類的一個實例。這個方法是實現new static()的關鍵所在。在繼承中,子類可以調用父類中的靜態方法,但是可以得到的返回值卻不是在子類中的實例化對象,而是在父類中的對象,它不能夠夠訪問子類中添加的屬性或者方法,那么這個時候我們可以利用new static()方法來構造新的對象。

$cat = Cat::create();
$cat->say(); //輸出 Meow!

在這個例子中,我們首先調用Cat類的create()方法,這個方法返回一個新的Cat實例。這個對象擴展了Animal類,因此可以調用say()方法輸出 "Meow!" 。

另外一個例子,我們創建一個Blog類:

class Blog {
public static $site_name = "My Blog";
public static function create_post() {
$post_class = get_called_class() . "_Post";
return new $post_class;
}
public function get_site_name() {
return self::$site_name;
}
}
class Article_Post extends Blog {
public function get_title() {
return "Article Title";
}
}
class Video_Post extends Blog {
public function get_title() {
return "Video Title";
}
}

在這個例子中,我們定義了一個Blog類,其中有一個create_post()方法,這個方法使用 get_called_class() 函數獲取調用類的類名。然后它通過連接類名和 "_Post" 來構造一個具體的對象類名稱,并且通過這個類名稱來實例化一個新的對象。

$article = Article_Post::create_post();
$video = Video_Post::create_post();
echo $article->get_title(); // 輸出 Article Title
echo $video->get_title(); // 輸出 Video Title
echo $article->get_site_name(); // 輸出 My Blog
echo $video->get_site_name(); // 輸出 My Blog

在這個例子中,我們首先調用Article_Post類的create_post()方法,這個方法通過使用new static()來構造一個新的Article_Post實例。同樣,我們也調用了Video_Post類的create_post()方法。在這兩個新的實例中,我們都能調用到定義在Blog類里的get_site_name()方法。

無論是 Article_Post 還是 Video_Post,都可以從 Blog 繼承其屬性和方法,但是通過調用它們的create_post()方法,它們各自也通過 new static() 實例化了自己。這種設計模式很常見于實現工廠模式等。