Chúng ta có thể quay lại từ hàm tạo php không?

Báo cáo một hàm xây dựng trả về một giá trị nguyên thủy. Khi được gọi với new, giá trị này sẽ bị mất và thay vào đó sẽ trả về một đối tượng. Để tránh cảnh báo, hãy sử dụng thẻ @return để chỉ định kết quả trả về của hàm

Chặn kiểm tra trong trình chỉnh sửa

  1. Định vị dấu mũ tại dòng được đánh dấu và nhấn Alt+Enter hoặc nhấp

  2. Nhấp vào mũi tên bên cạnh kiểm tra mà bạn muốn chặn và chọn hành động chặn cần thiết

    Nhìn vào đoạn mã sau, tôi thấy hàm tạo đang trả về một giá trị. Tôi nghĩ rằng các hàm tạo chỉ trả về các đối tượng. Ai đó có thể cho tôi biết tôi đang thiếu gì không?

    public function __construct($username = null, $password = null){
            $urlLogin = "{$this->apiHost}/login/$username";
    
            $postData = sprintf("api_type=json&user=%s&passwd=%s",
                                $username,
                                $password);
            $response = $this->runCurl($urlLogin, $postData);
    
            if (count($response->json->errors) > 0){
                return "login error";    
            } else {
                $this->modHash = $response->json->data->modhash;   
                $this->session = $response->json->data->cookie;
                return $this->modHash;
            }
        }
    

    Giải pháp tốt nhất

    Quả thật bạn đúng. Không thể làm gì với giá trị trả về của hàm tạo (ngoài việc sử dụng Đối tượng mà nó đã tạo)

    Vì vậy, không, bạn không bỏ lỡ bất cứ điều gì, đó là nhà phát triển đã viết mã đó

    Về mặt kỹ thuật, có thể sử dụng các giá trị trả về từ hàm tạo, nếu bạn gọi hàm trực tiếp

    $obj->__construct();
    

    Điều đó sẽ cho phép bạn sử dụng giá trị trả về của hàm tạo. Tuy nhiên, điều đó rất không phổ biến và khá không được khuyến khích

    Giải pháp liên quan

    C# – Gọi hàm tạo cơ sở trong C#

    Sửa đổi hàm tạo của bạn thành như sau để nó gọi đúng hàm tạo của lớp cơ sở

    public class MyExceptionClass : Exception
    {
        public MyExceptionClass(string message, string extrainfo) : base(message)
        {
            //other stuff here
        }
    }
    

    Lưu ý rằng hàm tạo không phải là thứ mà bạn có thể gọi bất cứ lúc nào trong một phương thức. Đó là lý do bạn gặp lỗi trong cuộc gọi của mình trong phần thân của hàm tạo

    C# – cách tốt nhất để cung cấp cho thuộc tính tự động C# một giá trị ban đầu

    Trong C# 5 trở về trước, để cung cấp cho các thuộc tính được triển khai tự động một giá trị ban đầu, bạn phải thực hiện điều đó trong một hàm tạo

    Kể từ C# 6. 0, bạn có thể chỉ định giá trị ban đầu trong dòng. Cú pháp là

    public int X { get; set; } = x; // C# 6 or higher
    

    $obj->__construct();
    
    0 được nhà thiết kế VS (hoặc bất kỳ người tiêu dùng nào khác) sử dụng để chỉ định giá trị mặc định, không phải giá trị ban đầu. (Ngay cả khi trong đối tượng được thiết kế, giá trị ban đầu là giá trị mặc định)

    Tại thời điểm biên dịch,

    $obj->__construct();
    
    0 sẽ không ảnh hưởng đến IL đã tạo và nó sẽ không được đọc để khởi tạo thuộc tính thành giá trị đó (xem thuộc tính DefaultValue không hoạt động với Thuộc tính tự động của tôi)

    Bất cứ khi nào bạn tạo một đối tượng trong PHP, bạn đặt dấu ngoặc đơn sau tên lớp. Trong các ví dụ trước, chúng tôi luôn để trống dấu ngoặc đơn

    color = $color;
        }
    }
    
    $hat = new Hat();
    

    Tuy nhiên, bạn thực sự có thể chuyển dữ liệu vào dấu ngoặc đơn giống như một hàm. Dữ liệu sẽ được chuyển đến một hàm đặc biệt trên lớp được gọi là hàm tạo

    class Ballcap
    {
        public $color;
    
        public function __construct($color)
        {
            $this->color = $color;
        }
    }
    

    Không bắt buộc phải có hàm tạo, nhưng có thể giúp việc tạo đối tượng mới dễ dàng hơn. Chúng thường được sử dụng để xác định giá trị ban đầu của một thuộc tính. thay vì viết

    RFC này đề xuất cho phép chỉ định kiểu trả về void trên hàm tạo và hàm hủy. Theo một cách nào đó, kiểu trả về tùy chọn này giống như dấu phẩy ở cuối. một số có thể sử dụng nó, một số có thể không, nhưng cả hai trường hợp đều hợp lệ và được phép

    Lưu ý, RFC sau đề xuất cho phép chỉ định loại trả về

    $obj->__construct();
    
    2 TÙY CHỌN. Nó ít nhiều chỉ là một bổ sung thẩm mỹ và không có nghĩa là bắt buộc. Nếu bạn không muốn loại trả lại, điều đó là hoàn toàn hợp pháp

    Đề nghị

    Phần giới thiệu tóm tắt toàn bộ đề xuất, do đó tôi đã đưa ra một vài lập luận và suy nghĩ của mình, về lý do tại sao chúng ta nên cho phép “kiểu mã thay thế” này

    tuyên bố rõ ràng

    Vì bản sửa lỗi #79679 đang được thực hiện, nên việc trả lại bất kỳ thứ gì từ hàm tạo sẽ sớm là bất hợp pháp (mặc dù không có kiểu trả về nào có nghĩa là

    $obj->__construct();
    
    3)

    
    

    In order to signal that the function does not return any value, we should be able (but not forced) to explicitly declare the void return type. As per the Zen of Python, explicit is always better than implicit.

    Thus, this RFC suggests allowing to do so:

    
    

    Moreover, it's important to remember that the constructor is rather a regular function that can be called just like any other method (i.e. $object->__construct();).

    Tài liệu là vô hiệu

    Trong hướng dẫn sử dụng PHP, cả hàm tạo và hàm hủy đều được chỉ định có kiểu trả về

    $obj->__construct();
    
    2 (e. g. nơi đây)

    __clone cho phép kiểu trả về void

    Cho rằng RFC xác thực chữ ký của các phương thức ma thuật sẽ vượt qua, chúng tôi sẽ có thể khai báo kiểu trả về

    $obj->__construct();
    
    5 là
    $obj->__construct();
    
    2. Một số người đã nói rằng hàm tạo “ngầm”/“gián tiếp” trả về một đối tượng mới. Nhưng mà

    Tính nhất quán với các phương pháp khác

    Về cơ bản, tất cả các phương thức (cả thông thường và ma thuật) đều cho phép có kiểu trả về rõ ràng. Các ngoại lệ duy nhất là hàm tạo và hàm hủy

    Như Kalle đã chỉ ra, thói quen gõ một kiểu trả về sau mỗi phương thức là một thói quen và có thể thấy mình viết kiểu này như một phong cách

    Thay đổi không tương thích ngược

    Không có

    Nó được phép không chỉ định một kiểu trả về. Mặc dù, vì không có loại trả về nào có nghĩa là

    $obj->__construct();
    
    3, nên việc “thu hẹp” loại trả về thành
    $obj->__construct();
    
    8 (sử dụng hiệp phương sai) là không hợp pháp, chỉ có
    $obj->__construct();
    
    2

    Bạn có thể quay lại từ một hàm tạo không?

    Trả về từ hàm tạo . Nhiệm vụ của họ là viết tất cả những thứ cần thiết vào this và nó sẽ tự động trở thành kết quả. Nhưng nếu có một câu lệnh trả về, thì quy tắc rất đơn giản. Nếu return được gọi với một đối tượng, thì đối tượng được trả về thay vì this. Usually, constructors do not have a return statement. Their task is to write all necessary stuff into this , and it automatically becomes the result. But if there is a return statement, then the rule is simple: If return is called with an object, then the object is returned instead of this .

    Chúng ta có thể ghi đè hàm tạo trong PHP không?

    Trong PHP, quy tắc duy nhất để ghi đè hàm tạo là không có quy tắc nào. Có thể ghi đè hàm tạo bằng bất kỳ chữ ký nào . Các tham số của chúng có thể được thay đổi tự do và không có hậu quả.

    Các nhà xây dựng có thể trả về giá trị trả về void không?

    Lưu ý rằng tên hàm tạo phải khớp với tên lớp và nó không được có kiểu trả về (như void ). Cũng lưu ý rằng hàm tạo được gọi khi đối tượng được tạo.

    Hàm tạo có được kế thừa trong PHP không?

    Thừa kế. Vì Kế thừa là một khái niệm hướng đối tượng nên Các Trình xây dựng được kế thừa từ lớp cha sang lớp con bắt nguồn từ nó . Bất cứ khi nào lớp con có hàm tạo và hàm hủy của riêng chúng, chúng được gọi theo thứ tự ưu tiên hoặc ưu tiên.