2011-07-08 43 views
2

我明白我可以這樣定義一個函數:PHP的用戶自定義函數,(IM新需要幫助)

<?php 
    function say_hello() { 
     echo "hello world!"; 
    } 

    say_hello(); 
?> 

......然後,我需要通過只是調用其他地方重用這個功能很多次按名稱功能。

我不明白的是「將數據傳遞給參數內的函數」。我很困惑的含義是什麼。

從我一直在學習的一個教訓,我有這樣的功能:

<?php 
    function say_helloTWO($word) { 
     echo " {$word} hello world a second time "; 
    } 

    say_helloTWO("my name is mike"); 
?> 

屏幕上的這版畫

我的名字叫邁克的Hello World第二次

當我用參數"my name is mike"測試函數,它打印到屏幕上,但我不明白如何這個工作。變量$word沒有宣佈任何地方,所以,如果我從回聲取出"$word",那麼只有"hello world a second time「顯示無my name is mike

這使我相信冥冥中的代碼塊中,$word定義,是這樣嗎?

回答

2

在你的第二個功能$word函數定義function say_helloTWO($word)被宣佈。

所以函數需要1個參數,它將被分配給變量$word以供使用之內的那個函數。

因此,當您撥打say_helloTWO("my name is mike");時,您將1個參數(「我的名字是麥克」)傳遞給函數say_helloTWO。該1參數被分配給函數定義中的第一個變量,因此在函數中可用爲$word

有意義嗎?

1

在這種情況下,函數的定義是說要帶一個參數。

function say_helloTWO($word) // $word is the name of this argument 

當你調用你的代碼的功能,您在括號內傳遞的第一件事將作爲傳遞第一個論點在你的例子中,字符串"my name is mike"被傳入函數並賦值給變量$ word。

如果我們擴大這一點,並有一個函數有兩個參數是這樣

function say_helloTHREE($word, $secondArg) 

那麼這個功能現在將有兩個參數傳遞到它。第一個參數將被分配給$ word,第二個參數將被分配給$ secondArg。

1

這算作一個有效的聲明。它在函數被調用時作爲參數提供時被定義。

<?php 
    function my_name_is ($name) { 
     echo "Hello, my name is " . $name; 
    } 
    my_name_is('mike'); 
    // returns 'Hello, my name is mike' 
?> 

因爲在調用函數時,它們提供'mike'作爲參數,$ name變成'mike'。這就是函數的工作原理。編號:

這是一個特殊的規則。 $ name不需要聲明,因爲它將在函數被調用時定義。 PHP理解這一點。如果你不提供參數,它仍然是定義的,它只是空的......我相信。

0

它作爲參數傳遞。所以它八九不離十已經括號

0

內聲明如果你做的事:

function say_helloTWO($word1, $word2, $word3)

,並呼籲:

say_helloTWO("a", "b", "c");

這將要求say_helloTWO並設置變量$word1"a"$word2"b"$word3"c"

這三個變量在say_helloTWO中定義,該函數正在運行。

舉一個實際的例子,說你必須解決二次方程的功能,它看起來像

function quadratic($a, $b, $c) { 
    $x = ($b + sqrt((b*b - 4*a*c)))/ 2*a; 
    return $x; 
} 

然後,而不是重寫代碼的二次,每次去解決,你可以把它像這個:

$y = quadratic (1, 2, 3); 

這將設置$ a爲1,$ b爲2和$ c爲3,並將結果存儲在$ y中。

您可以認爲二次函數是一種「小程序」,獨立於程序的其餘部分,$ a,$ b和$ c僅適用於quadratic函數。

0

這讓我相信在這個代碼塊的某個地方,$ word被定義了,是嗎?

不,$ word沒有在功能塊中定義,當你打電話時它被賦予「我的名字是mike」的值。

換句話說,當你調用函數$字定義:

/* here you are defining word to "my name is mike" */ 
say_helloTWO("my name is mike"); 

/* here you are defining word to "my name is jack"*/ 
say_helloTWO("my name is jack"); 

如果以上仍然沒有多大意義,你那麼我認爲你可能需要回到基本和研究編程世界中的一個功能。

1
<?php 
    function say_helloTWO($word) { 
     echo " {$word} hello world a second time "; 
    } 

    say_helloTWO("my name is mike"); 
?> 

在此代碼中,變量$word的'聲明'在函數聲明中進行。正如您在此行上看​​到的那樣,您可以在該行上找到$word。這足以讓PHP解析器知道在這個函數範圍內的第一個字段將被稱爲單詞。然後該函數在稍後的行echo " {$word} hello world a second time ";上反應出該變量,其中$word再次存在,打印出您設置爲此行上第一個參數值say_helloTWO("my name is mike");的值。

好問題。

+0

我確實有一個整體的問題小東西不明確的東西。因此,按照這種方式,以這種特殊方式,由於在該功能塊中$ word等於「我的名字是mike」,是否在該函數聲明中設置了一個臨時變量,如果是,那麼這是否意味着,該頁面,該var2不會有相同的價值?或者它在該頁面的任何地方都可用? – somdow

+0

它只在函數調用的範圍內可用。這意味着'$ word'只在函數的大括號內定義。 –