2017-02-19 8 views
3

Недавно я начал изучать PHP и, поскольку я привык к строго типизированным языкам (C++, Java), я бы предпочел использовать объявления типа hinting и return type. Однако, когда я пытаюсь использовать декларацию возвращаемого типа для примитивов, я получаю фатальную ошибку, заявляя, что моя функция не возвращает правильный тип.PHP: объявление возвращаемого значения в пространствах имен

Вот пример кода:

<?php 
namespace Foo; 

class Bar { 

    public function bar() : boolean { 
     return true; 
    } 

} 

$bar = new Bar(); 
$bar->bar(); 

?> 

Это вызовет фатальную ошибку, заявив, что Bar :: бар не возвращает значение Foo \ типа булево. Так что я попытался прибегнуть к глобальному пространству имен, изменив прототип функции для:

public function bar() : \boolean 

Но тогда я получил фатальную ошибку о том, что моя функция не возвращает значение логического типа. Я предполагаю, что PHP ищет тип, называемый boolean, в глобальном пространстве имен, а не для примитивного типа. Отлично, так как я должен указать, что хочу, чтобы моя функция возвращала значение примитивного типа boolean?

+1

Тип 'bool' не' boolean'. – Roman

+1

Вы также должны поместить 'declare (strict_types = 1);' как первую строку каждого файла. –

ответ

3

Тип подсказки для булевого значения на самом деле bool. Попробуйте следующее:

<?php 
namespace Foo; 

class Bar { 
    public function bar() : bool { 
     return true; 
    } 
} 

$bar = new Bar(); 
$bar->bar(); 
+0

Черт, я чувствую себя глупо. Спасибо за разъяснение :) – PandarinDev

+0

Nah, это не глупо :) PHP позволяет классам начинать с буквы в нижнем регистре, и пока он не начнет проверять подсказки скалярного типа, было очень часто видеть, что тип 'bool' намечен как' boolean '(в комментариях). Это еще один случай получения, когда инструмент может немного помочь вам обнаружить ошибку. –