PHP入門 函式

2021-08-13 11:31:14 字數 3800 閱讀 5579

函式是通過呼叫函式來執行的。

<?php

function

functionname()

?>

php 函式準則:

為了給函式新增更多的功能,我們可以新增引數。引數類似變數。

引數就在函式名稱後面有乙個括號內指定。

下面的例項將輸出不同的名字,但姓是相同的:

<?

phpfunction

writename

($fname

)echo

"my name is";

writename("

kai jim");

echo

"my sister's name is";

writename("

hege");

echo

"my brother's name is";

writename("

stale");

?>

輸出:

my

name

iskai

jimrefsnes.my

sister

's name is hege refsnes.

my brother'

s name

isstale

refsnes

.

下面的函式有兩個引數:

<?

phpfunction

writename

($fname

,$punctuation

)echo

"my name is";

writename("

kai jim",

".");

echo

"my sister's name is";

writename("

hege",

"!");

echo

"my brother's name is";

writename("

ståle",

"?");

?>

輸出:

my

name

iskai

jimrefsnes.my

sister

's name is hege refsnes!

my brother'

s name

isst

åle

refsnes

?

trait 的名字(php 5.4.0 新加)。自 php 5.4.0 起,php 實現了**復用的乙個方法,稱為 traits。

trait 名包括其被宣告的作用區域(例如 foo\bar)。

從基類繼承的成員被插入的 sayworld trait 中的 myhelloworld 方法所覆蓋。其行為 myhelloworld 類中定義的方法一致。優先順序是當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法。

<?php

class

base

}trait

sayworld

}class

myhelloworld

extends

base$o=

newmyhelloworld()

;$o->

sayhello()

;?>

以上例程會輸出:

hello

world

!

在宣告命名空間之前唯一合法的**是用於定義原始檔編碼方式的 declare 語句。所有非 php **包括空白符都不能出現在命名空間的宣告之前。

以下**會出現語法錯誤:

<?

phpnamespace

myproject

;// 命名空間前出現了「」 會致命錯誤 - 命名空間必須是程式指令碼的第一條語句

?>

與目錄和檔案的關係很象,php 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義:

<?

phpnamespace

myproject

\sub\level

;//宣告分層次的單個命名空間

const

connect_ok =1

;class

connection

function

connect

()?>

上面的例子建立了常量 myproject\sub\level\connect_ok,類 myproject\sub\level\connection 和函式 myproject\sub\level\connect。

php 命名空間中的類名可以通過三種方式引用:

非限定名稱,或不包含字首的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。如果當前命名空間是 currentnamespace,foo 將被解析為 currentnamespace\foo。如果使用 foo 的**是全域性的,不包含在任何命名空間中的**,則 foo 會被解析為foo。 警告:如果命名空間中的函式或常量未定義,則該非限定的函式名稱或常量名稱會被解析為全域性函式名稱或常量名稱。

限定名稱,或包含字首的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果當前的命名空間是 currentnamespace,則 foo 會被解析為 currentnamespace\subnamespace\foo。如果使用 foo 的**是全域性的,不包含在任何命名空間中的**,foo 會被解析為subnamespace\foo。

完全限定名稱,或包含了全域性字首操作符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為**中的文字名(literal name)currentnamespace\foo。

名稱解析遵循下列規則:

對完全限定名稱的函式,類和常量的呼叫在編譯時解析。例如 new \a\b 解析為類 a\b。

所有的非限定名稱和限定名稱(非完全限定名稱)根據當前的匯入規則在編譯時進行轉換。例如,如果命名空間 a\b\c 被匯入為 c,那麼對 c\d\e() 的呼叫就會被轉換為 a\b\c\d\e()。

在命名空間內部,所有的沒有根據匯入規則轉換的限定名稱均會在其前面加上當前的命名空間名稱。例如,在命名空間 a\b 內部呼叫 c\d\e(),則 c\d\e() 會被轉換為 a\b\c\d\e() 。

非限定類名根據當前的匯入規則在編譯時轉換(用全名代替短的匯入名稱)。例如,如果命名空間 a\b\c 匯入為c,則 new c() 被轉換為 new a\b\c() 。

在命名空間內部(例如a\b),對非限定名稱的函式呼叫是在執行時解析的。例如對函式 foo() 的呼叫是這樣解析的:

在當前命名空間中查詢名為 a\b\foo() 的函式

嘗試查詢並呼叫 全域性(global) 空間中的函式 foo()。

在命名空間(例如a\b)內部對非限定名稱或限定名稱類(非完全限定名稱)的呼叫是在執行時解析的。下面是呼叫 new c() 及 new d\e() 的解析過程: new c()的解析:

在當前命名空間中查詢a\b\c類。

嘗試自動裝載類a\b\c。

new d\e()的解析:

在類名稱前面加上當前命名空間名稱變成:a\b\d\e,然後查詢該類。

嘗試自動裝載類 a\b\d\e。

為了引用全域性命名空間中的全域性類,必須使用完全限定名稱 new \c()。

php入門 常用函式

常用函式 隨機數 echo rand 1 6 echo mt rand 1 6 小數函式 echo floor 5.99 floor 函式向下取整 echo ceil 5.1 ceil 函式向上取整 echo round 5.1 round 函式四捨五入 echo abs 1 abs函式求絕對值 其...

PHP入門之函式

php入門之流程控制 下面對函式簡單說一下。為完成某乙個功能的程式指令的合集,稱為函式。函式分為自定義函式和系統函式。function 函式名 引數列表 函式的使用,可以增加程式的復用性,如果乙個應用程式的功能,需要反覆使用,如果不使用函式,那麼就是一直複製貼上,復用性太差,如果使用函式,將這個功能...

php分頁函式入門參考

php分頁函式入門例項。需求,建立乙個test資料庫,在裡邊建乙個test表,裡面就 只要id欄位,輸入一下資料就可以啦。由於水平有限,難免出錯。conn mysql connect localhost root maxnum 2 每頁顯示記錄條數 mysql select db test conn...