我很难理解PHP中类型提示的重要性。
PHP中的“类型提示”可以定义如下:
“类型提示”强制您只传递特定类型的对象。这可以防止您传递不兼容的值,并在您与团队合作时创建一个标准。
- 因此,在最基本的层次上进行类型提示,实际上并不需要使代码工作?*
我有下面的代码来尝试和理解正在发生的事情...
index.php
<?php
include 'Song.php';
$song_object = new Song;
$song_object->title = "Beat it!";
$song_object->lyrics = "It doesn't matter who's wrong or right... just beat it!";
function sing(Song $song)
{
echo "Singing the song called " . $song->title;
echo "<p>" . $song->lyrics . "</p>";
}
sing($song_object);
歌曲.php
<?php
class Song
{
public $title;
public $lyrics;
}
不管有没有sing()函数中的小类型提示,代码都可以完成它的任务;
所以,这让我相信类型提示只是一种编码约定,以确保只使用某些类,而不需要生成函数代码,这是正确的吗?
正如上面引用的话所暗示的,类型暗示是为了 * 如果你和一个团队一起工作 * 创建一个标准。
我错过了什么吗?
7条答案
按热度按时间izkcnapc1#
类型提示不是必需的,但它可以让你抓住某些类型的错误。例如,你可能有一个函数或方法需要一个整数。PHP会将happily convert“数字字符串”转换为整数,这可能会导致难以调试的行为。如果您在代码中指定您特别需要一个整数,这可以首先防止这些类型的错误。许多程序员认为以这种方式保护他们的代码是一种最佳实践。
作为一个具体的例子,让我们看一下
index.php
文件的更新版本:index.php
以及我添加的新
Test.php
文件:Test.php
当我现在运行
index.php
时,我得到以下错误:输出:
这是PHP让我知道,我试图使用错误的类类型时,我调用
sing()
函数。这很有用,因为即使上面的示例可以工作,
Test
类也可以与Song
类不同。这可能导致以后难以调试的错误。以这种方式使用提示为开发人员提供了一种在类型错误导致问题之前防止它们的方法。这在像PHP这样的语言中特别有用,因为PHP经常渴望在类型之间进行自动转换。uttx8gqw2#
类型暗示是一个自然的过程。起初,这看起来像是额外的工作,但随着项目在PHP中的增长,这是非常有帮助的。它允许更好的可读性,并使错误控制和严格的编程约定更容易应用。
首先,你必须实现'contract',其中的contract是一个php接口,它可以'锁定'常量和关键的公共方法及其参数,如下所示:
然后继续实际执行部分:
使用接口,您只需定义函数,然后在song类中实现它。这样,您就可以随时注入另一个歌曲类(具有更新的功能和更改),而不会破坏您的应用程序。查看OOP接口:http://php.net/manual/en/language.oop5.interfaces.php
从php7开始,你也可以定义函数的返回类型。https://wiki.php.net/rfc/return_types
roqulrg33#
无论有没有类型提示,您的代码都可以正常运行。
类型提示只是强制你将特定类型的东西传递给那个函数/方法。
例如
假设用户按如下方式传入一个数组,此函数将正常工作。
但是,PHP允许用户传入任何东西,例如字符串、int、bool、对象等。当它到达
displayNames
函数内部的foreach
时,这些都不会按照您的预期进行操作。添加一个
array
类型提示强制执行这个函数期望$names
是一个数组的事实。数组是一个简单的例子,但正如你所说,你也可以输入提示对象。在这种情况下,它允许开发人员只接受
doSqlQuery()
方法中的数据库连接的示例。你应该知道
PHP 7以下的版本只允许类(包括接口)和数组的类型提示。为了输入
string
,int
,bool
等的提示,你需要使用PHP 7。kqqjbcuj4#
有必要吗?没有
这是最佳实践吗?是的
哪个PHP版本支持它?PHP 5.6只支持类,PHP 7+也允许对原语(int,string,boolean等)进行类型提示。
它有什么用处?
1.通过IDE获取提示(取决于IDE)。
1.标准化团队项目中的编码风格。
1.减少logic errors。
1.从PHP是lossy-typed语言,到kindof-strongly-typed PHP,但由开发人员选择使用lossy或strongly。
eaf3rand5#
类型暗示就像名字更像是一个暗示。它允许开发人员查看哪些类可以作为参数传递,并防止它们传递错误的参数。如果您与不止一个人一起工作在同一个项目上,并且/或者代码是开源的,这将特别有用。
在php7中,字符串、int、(混合)和数组的类型提示已经被添加,因此您不仅需要类,而且还可以使用标准的php类型
41zrol4v6#
yiytaume7#
它使代码的阅读变得可预测,就像你知道参数是什么类型,你知道函数返回什么类型(如果有的话)。很多时候,当你阅读到不属于你的代码时,你会跟踪自己到一个函数声明,经常你会问自己“等等,参数1或参数X的类型是什么?””当你想知道参数是什么的时候,你不想一遍又一遍地放一个像var_dump()这样的调试器。