6

Tôi đang làm việc với một chức năng có chữ ký trông như thế nàylà đi NULL param chính xác giống như đi qua không param

afunc(string $p1, mixed $p2, array $p3 [, int $p4 = SOM_CONST [, string $p5 ]]) 

Trong một số trường hợp tôi không có dữ liệu cho tham số cuối cùng $p5 để vượt qua, nhưng vì mục đích nhất quán, tôi vẫn muốn truyền một cái gì đó như NULL. Vì vậy, câu hỏi của tôi, không điều trị PHP đi qua một NULL chính xác giống như không đi qua bất cứ điều gì?

somefunc($p1, $p2, $p3, $p4 = SOM_CONST); 
somefunc($p1, $p2, $p3, $p4 = SOM_CONST, NULL); 
+1

Có chúng giống nhau, bởi vì nếu bạn không chuyển được gì, bộ nhớ sẽ không được cấp phát. –

+0

tài liệu về cách tạo chữ ký của hàm và sử dụng hàm là gì – XMen

Trả lời

7

số lẽ, chữ ký chính xác là:

function afunc($p1, $p2, $p3, $p4 = SOM_CONST) 

và chức năng sử dụng func_get_arg hoặc func_get_args cho $p5.

func_num_args sẽ khác nhau tùy thuộc vào việc bạn vượt qua NULL. Nếu chúng ta làm:

{ 
    echo func_num_args(); 
} 

sau đó

afunc(1,2,3,4,NULL); 

afunc(1,2,3,4); 

cho 5 và 4.

Nó tùy thuộc vào chức năng liệu để xử lý những giống nhau.

+1

Ví dụ thực tế về hàm này với hàm PHP: 'substr ($ str, 1)' vs 'substr ($ str, 1, null)'. - "Nếu chiều dài được cho và là 0, FALSE hoặc NULL thì một chuỗi rỗng sẽ được trả về". – ficuscr

4

Đi qua NULL được chính xác giống như không đi qua một cuộc tranh cãi - nếu giá trị mặc định là NULL, ngoại trừ trong bối cảnh của func_num_args chức năng:

trả về số đối số được truyền đến chức năng .

<?php 

function test($test=NULL) { 
    echo func_num_args(); 
} 

test(); //outputs: 0 
test(NULL); //outputs: 1 

?> 
6

số Nó chỉ là như nhau nếu giá trị mặc định của tham số là NULL, nếu không không:

function a($a, $b, $c = 42) { 
    var_dump($c); 
} 

a(1, 2, NULL); 

in NULL.

Vì vậy, bạn không thể nói nó luôn giống nhau. NULL chỉ là một giá trị khác và không phải là rằng đặc biệt.


Chưa kể các thông số không bắt buộc: Gọi a(1) sẽ cung cấp cho bạn một lỗi (cảnh báo) nhưng a(1,NULL) công trình.