hàm php trả về mặc định là gì?


76

Nếu tôi không trả về gì một cách rõ ràng, thì hàm php chính xác trả về cái gì?

function foo() {}
  1. Đó là loại gì?

  2. Giá trị của nó là gì?

  3. Làm cách nào để kiểm tra nó chính xác với ===?

  4. Điều này có thay đổi từ php4 sang php5 không?

  5. Có sự khác biệt giữa function foo() {}function foo() { return; }

(Tôi không hỏi làm thế nào để kiểm tra nó như thế nào if (foo() !=0) ...)


1
Xem php.net/manual/en/functions.returning-values.php cho tài liệu chính thức
Sophivorus

Câu trả lời:


102
  1. null
  2. null
  3. if(foo() === null)
  4. -
  5. Không.

Bạn có thể dùng thử bằng cách:

$x = foo();
var_dump($x);

38

Không trả về giá trị từ một hàm PHP có cùng ngữ nghĩa với một hàm trả về null.

function foo() {}

$x=foo();

echo gettype($x)."\n";
echo isset($x)?"true\n":"false\n";
echo is_null($x)?"true\n":"false\n";

Điều này sẽ xuất ra

NULL
false
true

Bạn sẽ nhận được kết quả tương tự nếu foo được thay thế bằng

function foo() {return null;}

Không có thay đổi nào trong hành vi này từ php4 sang php5 sang php7 (tôi chỉ kiểm tra để chắc chắn!)


1 nhưng tôi ước gì có thể 2, đây là câu trả lời hoàn chỉnh hơn (bao gồm câu hỏi # 4 liên quan đến sự thay đổi trong hành vi giữa các phiên bản php)
Jonathan

-2

Tôi đã tìm thấy một sự kỳ lạ khi chỉ định các kiểu trả về của hàm. Khi bạn làm vậy, bạn phải rõ ràng về việc trả lại một cái gì đó từ các hàm của bạn.

<?php

function errorNoReturnDeclared($a = 10) : ?string {
    if($a == 10) {
        echo 'Hello World!';
    }
}

errorNoReturnDeclared(); //Fatal error

Lỗi:

 Uncaught TypeError: Return value of errorNoReturnDeclared() must be of the type string or null, none returned in 

Vì vậy, nếu bạn quyết định thêm một số thông số kỹ thuật kiểu trả về trên các hàm cũ, hãy chắc chắn rằng bạn đã suy nghĩ về điều đó.


1
Bạn thấy thật kỳ lạ khi bạn phải trả lại bất cứ thứ gì khi bạn đã nói rõ ràng với PHP rằng bạn SẼ trả về một chuỗi hoặc null?
emix

Chà, nếu một hàm trả về null theo mặc định, thì tôi không hiểu tại sao tôi nên làm điều đó ngay cả khi tôi đang khai báo kiểu trả về. Trình biên dịch sẽ xử lý nó.
Patrick.SE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.