如何創建一個可以呼叫多個函式的類?
例子:
class ClassName
{
public static function func1()
{
}
public static function func2()
{
}
public static function func3()
{
}
}
ClassName::func1()->func2()->func3();
結果 未捕獲的錯誤:在 null 上呼叫成員函式 funcX()
uj5u.com熱心網友回復:
在 PHP 中,您不能像在 JavaScript 中那樣呼叫靜態函式“捎帶”。你有幾個選項..在串列中呼叫它們,一次一個..像這樣:
ClassName::func1();
ClassName::func2();
ClassName::func3();
或喜歡
$foo = new ClassName;
$foo->func1();
$foo->func2();
$foo->func3();
現在,如果您想通過一次呼叫來運行它們,您需要嵌套函式但我們必須擺脫static方法......
<?php
class ClassName
{
public function func1()
{
echo "1 \n";
$this->func2();
}
public function func2()
{
echo "2 \n";
$this->func3();
}
public function func3()
{
echo "3 \n";
}
}
$foo = new ClassName;
$foo->func1();
最后,如果你想在一個類中順序運行你的所有函式,你可以使用get_class_methods并回圈遍歷所有函式...... IE
<?php
class ClassName
{
public static function func1()
{
echo "1 \n";
}
public static function func2()
{
echo "2 \n";
}
public static function func3()
{
echo "3 \n";
}
}
$functions = get_class_methods('Classname');
foreach ($functions as $function){
ClassName::$function();
}
這兩種方法都會導致:
1
2
3
但是,如果您選擇擺脫靜態方法(如我們的“嵌套函式”中所示).. 而您只需選擇 public .. 那么您的語法可以使用@arkascha 的構建方法。
public function func1(): ClassName { // From @arkascha's answer ..
$foo = new ClassName;
$foo->func1()->func2()->func3();
區別在于理解公共方法和靜態方法
uj5u.com熱心網友回復:
正如您所建議的,這根本不適用于靜態方法。
然而,這可以通過一個實體物件來實作,即所謂的“構建器模式”或“流利的風格”:
<?php
class ClassName {
public function func1(): ClassName {
echo "1";
return $this;
}
public function func2(): ClassName {
echo "2";
return $this;
}
public function func3(): ClassName {
echo "3";
return $this;
}
}
(new ClassName())->func1()->func2()->func3();
輸出是:
123
uj5u.com熱心網友回復:
首先,您需要創建靜態實體來制作鏈式方法。因為你的方法是靜態的,不能像鏈一樣使用它們。在它之后,您需要每次在 end 方法處回傳此函式。像這樣:
class ClassName
{
private static $self;
public static function func1()
{
echo ' i am '.__METHOD__." \n";
return self::instance();
}
public static function func2()
{
echo ' i am '.__METHOD__." \n";
return self::instance();
}
public static function func3()
{
echo ' i am '.__METHOD__." \n";
return self::instance();
}
public static function instance(){
return self::$self ?? self::$self = new static ;
}
}
ClassName::func1()->func2()->func3();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521408.html
標籤:php功能班级
下一篇:用Python求解線性方程
