簡體   English   中英

PHP構造函數中的類型提示?

[英]Type hinting in PHP constructors?

有什么可以阻止我在__construct()括號內進行類似類型的提示嗎?

<?php

    class SomeClass extends BaseClass {

        public function __construct(array $someArray) {

            parent::__construct($someArray);
        }

還是我只能這樣做?

<?php

    class SomeClass extends BaseClass {

        public function __construct($someArray = array()) {

            parent::__construct($someArray);
        }

編輯:

這是有效的方法:(感謝@hakra和@Leigh)

<?php

    class SomeClass extends BaseClass {

        public function __construct( array $someArray = NULL ) {

            parent::__construct( (array) $someArray);
        }

對我來說,它看起來不錯,干凈,我確切知道它的意思。

這是沒有默認值的類型提示,指出必須給定參數,並且它的類型必須是數組

public function __construct(array $someArray) {


如果沒有傳遞任何參數,則沒有類型提示,這將為參數提供默認值。

public function __construct($someArray = array()) {


他們是兩個不同的東西。

在第二種情況下,您可以不帶任何參數調用該函數,它將起作用,但是第一種情況則不會。

如果需要,可以將兩者結合起來以指定默認值並指定所需的類型。

public function __construct(array $someArray = array()) {

或者如@hakre所述,您可以執行以下操作:

public function __construct(array $someArray = NULL) {

您可以這樣做:

public function __construct(array $someArray = NULL)
{
    $someArray = (array) $someArray;
    parent::__construct($someArray);
    ...

這里的情況是利用規則的= NULL例外。 下一行:

    $someArray = (array) $someArray;

只是將NULL轉換為空數組,否則將數組原樣保留為數組的一種簡寫形式(所謂的Docs轉換為array ):

NULL轉換為數組會導致一個空數組。

(來自: 轉換為數組Docs

當然,您可以將它寫得更短:

public function __construct(array $someArray = NULL)
{
    parent::__construct((array) $someArray);
}

但這並不能很好地解釋它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM