本文目錄一覽:
- 1、php中如何實現函數重載呢?
- 2、php 到底可不可以重載
- 3、php 有方法重載嗎?
- 4、PHP重載 有什麼用
- 5、php中重載是多太的另一種實現方式,本人貼出原書實力代碼,請求解答,實例代碼一運行就報錯
php中如何實現函數重載呢?
PHP本身不能函數重載的,不過你可以使用類中的__call的魔術方法來實現。該魔術方法接受兩個參數,一個數方法的名稱,一個是包含該方法參數的數組。當對一個類調用一個不可見的方法時(比如該方法是private或者根本沒有這個方法)被觸發調用。
php 到底可不可以重載
php 作為一種弱類型語言,本身不能像強類型如java ,c++那樣,直接的實現重載。不過可以通過一些方法,間接的實現重載。
使用一個統一的函數來實現重載。該方法要使用func_get_args()和func_num_args()方法。
?php
function test1($name){
echo $name;
}
function test2($name,$age){
echo $name.$age;
}
function load(){
//返回輸入的元素數目
$num=func_num_args();
//返回輸入元素列表的數組形式
$arr=func_get_args();
if($num==1){
test1($arr[0]);
}else {
test2($arr[0],$arr[1]);
}
}
load(“a”);
echo “br/”;
load(“a”,”b”);
?
2.當對象試着調用不存在或者受權限限制的方法時,__call()方法會被自動調用,從而可以實現類型重載的效果。該方法是php5新增的方法。
?php
class A{
//name :調用的方法名字。args:參數列表
function __call($name,$args){
$num=count($args);
if($num==1){
$this-test1($args[0]);
}
else {
$this-test2($args[0],$args[1]);
}
}
function test1($name){
echo $name;
}
function test2($name, $age){
echo $name.” “.$age;
}
}
$a=new A();
$a-a(“a”);
echo “br/”;
$a-a(“a”,”b”);
?
php 有方法重載嗎?
直接重載是無法實現的.但是可以通過__call()方法來變相實現.實際上這個方法是PHP開發者偷懶,才想出這麼一個拐彎抹角的方法,而且用這個方法實現的重載程度非常有限,尤其是構造器重載,已經不是真正意義上的構造器。構造器在對象被創建時自動執行,一般不會顯式的調用。而用__call()方法實現的構造器必須顯示的調用,也就是說構造函數與普通函數的性質完全相同,只不過功能不同而已了。
PHP重載 有什麼用
用到的情況還是很多的 比方說 你在做底層開發時 經常會創建一些共有的 變量 就要加載這些數據 這是就得用這些函數了
php中重載是多太的另一種實現方式,本人貼出原書實力代碼,請求解答,實例代碼一運行就報錯
首先你這個報錯是因為一個類定義里不能直接寫表達式,必須放在方法裡面。可能是你不小心把大括號的結尾放錯了地方。
你這個不能算什麼多態,而是php的魔術方法__Call ,當調用一個類中不存在的方法時,會調用這個方法。
把代碼做了改寫:
?php
header(“content-type:text/html;charset=utf-8”);
class C{
function __call($name,$num){
echo “方法的名稱:”.$name.”br \”;
echo “方法參數的個數:”.count($num).”br \”;
if(count($num)==1){
echo $this-list1();
}
if (count($num)==2){
echo $this-list2();
}
}
public function list1(){
return “這是list1函數br \”;
}
public function list2(){
return “這是list2函數br \”;
}
}
$m=new C();
$m-list(1);
$m-list(1,2);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238041.html