strict_types包括时不工作

问题描述:

我有一个方法返回true或false,但是当我添加一个类型声明isAdmin() : string它不会引发致命错误。strict_types包括时不工作

我有declare(strict_types=1);在第二个包含在课前的文件中。 实施例:

file1.php

<?php 
declare(strict_types=1); 

file2.php

<?php 
include "file1.php"; 

class Test 
{  
    public function user() : int 
    { 
     return true; 
    } 
} 

$test = new Test(); 
var_dump($test->user()); 

此代码不会引发致命错误。相反,var_dump返回的布尔值为int(1)。如果我将方法类型更改为字符串,var_dump返回布尔值string(1) "1"

如何避免将declare(strict_types=1);放在每个模型文件中?

+0

这意味着你的函数返回一个字符串,你返回一个布尔值。 – 2017-10-07 14:34:31

+1

@headmax认为他问为什么这个通过,如果他有'strict_types'启用。这个例子__应该失败,但显然它的通过。 – Carey

+0

此外,你可以跳过if语句,只是'返回isset($ this-> type)&& $ this-> type == 3' – Carey

目前无法在PHP中全局声明严格的输入。从manual

它可以在每个文件的基础

而且

严格类型适用于功能从严格类型的文件中进行的呼叫启用严格模式启用,而不是在该文件中声明的函数。如果没有严格打字的文件通过严格打字来调用文件中定义的函数,则会优先考虑调用者的偏好(弱打字),并强制该值。

我的猜测是,部分原因是为了保持软件包之间的兼容性。如果您在全球范围内启用并且您使用的某些软件包需要严格打字才能关闭,该怎么办?

在进一步注意之前,您必须在您要使用它的每个文件中声明它。

+1

Upvoted,因为技术部分是正确的。但仅供参考,这从来不涉及兼容性,它不仅仅是“现在” - 这是你正在添加的意见。 – Narf

+0

你是对的。我不记得我在哪里阅读,但它不在手册中。我会编辑它。 – ishegg

+0

谢谢!我想我现在不会使用它。 – pidari