例如,是有可能写出这样的代码:
int $x = 6;
str $y = "hello world";
bool $z = false;
MyObject $foo = new MyObject();
而且是有可能这样定义的功能:
public int function getBalance()
{
return 555; //Or any numeric value
}
例如,是有可能写出这样的代码:
int $x = 6;
str $y = "hello world";
bool $z = false;
MyObject $foo = new MyObject();
而且是有可能这样定义的功能:
public int function getBalance()
{
return 555; //Or any numeric value
}
编辑:这个答案适用于PHP 5.6及更早版本。 正如在最近的答案,PHP版本注意7.0和更高版本有一些这方面的支持
原来的答案:
号没有为自PHP5类型提示的支持,但“类型的提示只能是对象和阵列的(自PHP 5.1)型。不支持传统类型与int和string暗示”。
也就是说,只要目前的PHP去,并尽可能如果你问我,应该去。
在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
PHP没有严格的类型,所以没有。 这就是说,它支持有限类型提示上的功能-这就是尽可能接近它得到。
很不幸的是,不行! 我是在一个大的项目结束,现在涉及到很多alogorithms(图论,电路等),我希望我没有选择PHP。
我一直在使用PHP的约10年,仍然认为这是一个良好的语言,然而一个必须做出决定! 什么是对我不好,缺乏严格的分型可能是很好的一个人。
此外,我想提一提,我经常写额外的代码支持严格打字,只是一个普通的例子是这样的:
if (is_array($r) && count($r)===0)
并透露,错误和隐患情况等超出了解释。
有错误和情况,我就从来没有能够想到/检测的先验,写所有这些多余的代码无法享受,但它至少会救我愚蠢的错误!
如果我会回去,也许我会选择PHP的Web部件,你知道获取和显示给用户的数据,PHP是只是伟大的是,处理字符串数组,聊到数据库等等等等,但对于主要核心,算法等我会去C ++,也许哈斯克尔..不知道,至少有一些严格类型。
有些事情,你可以尝试以模拟一个穷人的严格类型检查使用断言()来强制输出为特定类型的返回之前:
/**
* 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的语言。
也许你应该试试这个PHP扩展https://github.com/krakjoe/strict 。 以下类型的支持介绍:
号这句法将无法正常工作。
你可以,理论上,拿出强迫自己严格的排序打字对象的系统,但它不会执行和...为什么你会想,反正?
如果您需要严格的类型,使用严格的类型语言。
由于答案基本上是“没有”,一种替代方案:一个PHP“棉绒”,这应该抓住一些东西编译时检查会赶上像C.不一样的一个staticly类型的语言,但应防止一些sillyness
“有一个静态代码分析[像皮棉]为PHP文件”列出了许多这些。
你可以使用h2tp transpiler到transpile HACK代码PHP:
你可以做到这一点感谢Facebook的团队和HACK语言 。
访问http://hacklang.org和http://hhvm.com获取更多信息。
如果您想直接在哈克+ HHVM环境中,你也可以使用Facebook的内部IDE编写核素