是否有可能编写严格定义的PHP代码?(Is it possible to write strictl

2019-07-20 15:57发布

例如,是有可能写出这样的代码:

int $x = 6;
str $y = "hello world";
bool $z = false;
MyObject $foo = new MyObject();

而且是有可能这样定义的功能:

public int function getBalance()
{
   return 555; //Or any numeric value
}

Answer 1:

编辑:这个答案适用于PHP 5.6及更早版本。 正如在最近的答案,PHP版本注意7.0和更高版本有一些这方面的支持


原来的答案:

号没有为自PHP5类型提示的支持,但“类型的提示只能是对象和阵列的(自PHP 5.1)型。不支持传统类型与int和string暗示”。

也就是说,只要目前的PHP去,并尽可能如果你问我,应该去。



Answer 2:

在PHP 7实现“标量类型声明”,例如:

public function getBalance(): int {
    return 555;
}

需要声明,您将使用严格类型:

<?php
    declare(strict_types=1);

    function sum(int $a, int $b): int {
        return $a + $b;
    }

    sum(1, 2);
?>

更多信息: https://wiki.php.net/rfc/scalar_type_hints_v5



Answer 3:

PHP没有严格的类型,所以没有。 这就是说,它支持有限类型提示上的功能-这就是尽可能接近它得到。



Answer 4:

很不幸的是,不行! 我是在一个大的项目结束,现在涉及到很多alogorithms(图论,电路等),我希望我没有选择PHP。

我一直在使用PHP的约10年,仍然认为这是一个良好的语言,然而一个必须做出决定! 什么是对我不好,缺乏严格的分型可能是很好的一个人。

此外,我想提一提,我经常写额外的代码支持严格打字,只是一个普通的例子是这样的:

if (is_array($r) && count($r)===0)

并透露,错误和隐患情况等超出了解释。

有错误和情况,我就从来没有能够想到/检测的先验,写所有这些多余的代码无法享受,但它至少会救我愚蠢的错误!

如果我会回去,也许我会选择PHP的Web部件,你知道获取和显示给用户的数据,PHP是只是伟大的是,处理字符串数组,聊到数据库等等等等,但对于主要核心,算法等我会去C ++,也许哈斯克尔..不知道,至少有一些严格类型。



Answer 5:

有些事情,你可以尝试以模拟一个穷人的严格类型检查使用断言()来强制输出为特定类型的返回之前:

/**
 * Get Balance
 *
 * @return int
 */
function getBalance()
{
    /* blah blah blah */
   $out = 555; //Or any numeric value
   assert('is_int($out)');
   return $out;
}

所以,你把你的断言所有活动在整个开发和测试,有点像编译器在编译时的检查。

诚然, 断言()页面热衷于断言,你不应该用断言检查输入参数,而是使用普通条件语句来检查。

这个答案有什么我认为是一个很好的规则:

拇指是适用在大多数语言(一切,我隐约知道)的规则是,断言是用来断言一个条件总是真,而一个if是合适的,如果它是可以想象的,它有时会失败。

如果你模拟严格的类型检查(编写代码时,恶狠狠地保持类型;不要试图验证从外部输入),那么你就应该是某些类型是什么,除非你犯了一个错误。

更新:

还有这个: http://hacklang.org/静态类型Facebook的基于PHP的语言。



Answer 6:

也许你应该试试这个PHP扩展https://github.com/krakjoe/strict 。 以下类型的支持介绍:

  • 整数,INT
  • 浮动,双
  • 布尔,布尔
  • 资源


Answer 7:

号这句法将无法正常工作。

你可以,理论上,拿出强迫自己严格的排序打字对象的系统,但它不会执行和...为什么你会想,反正?

如果您需要严格的类型,使用严格的类型语言。



Answer 8:

由于答案基本上是“没有”,一种替代方案:一个PHP“棉绒”,这应该抓住一些东西编译时检查会赶上像C.不一样的一个staticly类型的语言,但应防止一些sillyness

“有一个静态代码分析[像皮棉]为PHP文件”列出了许多这些。



Answer 9:

你可以使用h2tp transpiler到transpile HACK代码PHP:

你可以做到这一点感谢Facebook的团队和HACK语言

访问http://hacklang.org和http://hhvm.com获取更多信息。

如果您想直接在哈克+ HHVM环境中,你也可以使用Facebook的内部IDE编写核素



文章来源: Is it possible to write strictly typed PHP code?
标签: php oop