一、偽類型
PHP偽類型有三種,分別是:1,mixed混合類型。2,number數字類型。3,callback回調類型。
1,mixed混合類型:
mixed說明一個參數可以接受多種不同的類型,但並不是所有的類型。
2,number數字類型:
number參數可以接受integer整型和float浮點型。
3,callback回調類型:
例如call_user_func()函數就可接收用戶自定義的函數作為一個參數,他是php的一個內置函數。callback函數不僅可以是一個函數,也可以是一個對象的方法,靜態類的方法也可以。一個php函數用函數名字符串來傳遞,可以傳遞任何內置的或者用戶自定義的函數,除了語言結構例如array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()等。
如果要傳入一個對象的方法,需要以數組的形式來傳遞,數組下標0是對象名,下標1是方法名。要是沒有實例化為對象的靜態類,要傳遞其方法,要將數組0下標指明的對象名換成該類的名稱。
除了普通的用戶定義的函數外,也可以使用create_function來創建一個匿名的回調函數。
示例::
- <?php
- //普通的回調函數
- function my_callback_function(){
- echo "my is callback function.";
- }
- //回調方法
- class MyClass{
- static function myCallbackMethod(){
- echo "my is callback method.";
- }
- }
- //num1:回調函數
- call_user_func('my_callback_function');
- //num2:靜態類的方法
- call_user_func(array('MyClass','myCallbackMethod'));
- //num3:對象方法
- $obj = new MyClass();
- call_user_func(array($obj,'myCallbackMethod'));
- //num4:靜態類的方法(5.3.0以上)
- call_user_func('MyClass::myCallbackMethod');
- //num5:相對靜態方法調用
- class A {
- public static function who(){
- echo "A";
- }
- }
- class B extends A {
- public static function who(){
- echo "B";
- }
- }
- call_user_func(array('B','parent::who')); //輸出B
- //num6:調用時傳入參數
- function test($a,$b){
- echo $a;
- echo $b;
- }
- call_user_function('test','1','2'); //輸出1 2
- //num7:調用類方法傳入參數
- class a(){
- function b($c){
- echo $c;
- }
- }
- call_user_func(array('a','b'),'1'); //輸出1
- //num8:call_user_func_array與call_user_func很相似,只不過換了一種方式傳遞參數,讓參數結構更清晰:
- function a($b,$c){
- echo $b;
- echo $c;
- }
- call_user_func_array('a',array('1','2')); //輸出1 2
- //num9:用call_user_func_array調用類內部方法
- class A(){
- function a($b,$c){
- echo $b;
- echo $c;
- }
- }
- call_user_func_array(array('A','a'),array('1','2')); //輸出1 2
- //num10:call_user_func函數和call_user_func_array函數都支持引用,這讓他們和普通的函數調用更趨於功能一致:
- function a($b){
- $b++;
- }
- $c=0;
- call_user_func('a',$c); //輸出1
- call_user_func('a',array($c)); //輸出2
二、偽變量
php中的$...為偽變量,表示等等的意思,當一個函數可以接受任意個參數時使用此變量名。