Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的对象类型暗示_Php_Type Hinting - Fatal编程技术网

php中的对象类型暗示

php中的对象类型暗示,php,type-hinting,Php,Type Hinting,我需要帮助理解对象的类型暗示。我尝试搜索stackoverflow,但找不到任何有其他用户解释其用法的内容。如果你找到了,请告诉我。 首先让我解释一下我所理解的 当使用数组的类型提示时,用户必须键入一个数组参数,否则将抛出错误 <?php function something(array $myval) { return print_r($myval); } 使用您的示例: $foo = new Person; $foo->name = 'smith'; $somethi

我需要帮助理解对象的类型暗示。我尝试搜索stackoverflow,但找不到任何有其他用户解释其用法的内容。如果你找到了,请告诉我。 首先让我解释一下我所理解的

当使用数组的类型提示时,用户必须键入一个数组参数,否则将抛出错误

<?php
function something(array $myval)
{
    return print_r($myval);
}
使用您的示例:

$foo = new Person;
$foo->name = 'smith';

$something = doSomething($foo);

echo $something;
类型暗示意味着您传递的任何内容都必须是所暗示类型的实例(与类型相同)

因此,如果向
Person
提示,则只接受该类型的对象

在您给出的示例中,您尝试传递字符串而不是对象

更新

“类型暗示”强制您只传递特定类型的对象。这可以防止您传递不兼容的值,如果您正在与团队合作,则会创建一个标准

假设您有一个函数
sing()
。您希望确保它只接受类型为
Song
的对象

让我们创建我们的类
歌曲

class Song{

public $title;
public $lyrics;

}
我们的函数sing()。我们将键入hint to
Song
,以确保不能向其传递其他类型的参数:

function sing(Song $song){

echo "Singing the song called " .$song->title;
echo "<p>" . $song->lyrics . "</p>";

}
然后我们呼吁:

sing($hit);
这样就行了

现在,假设我们有一节课

class Poem{

public $title;
public $lyrics;

}

$poem = new Poem;

$poem->title = "Look at the sea";
$poem->lyrics = "How blue, blue like the sky, in which we fly..."
如果我们尝试使用函数“sing”调用它

sing($poem)

我们将得到一个错误,因为
$poem
不是我们在创建函数
sing()

时所暗示的对象类型,因为
'smith'
是一个字符串而不是一个对象,所以您可能会得到一个重复的错误。您必须将
$foo
传递到
doSomething()
才能使其工作。“我尝试搜索stackoverflow”--您尝试过搜索文档吗?所有内容都在那里,有示例。@在传递对象之前,必须实例化该对象。这就是为什么会出现错误-您刚刚传递了一个字符串。输入提示不会将传递的参数转换为对象。很抱歉,我的手指点击了鼠标,无法将其恢复为零。我将在我的计算机上尝试另一个示例,并将发布更新。由于某种原因,当我自己尝试时,我总是会出错。如果你不介意的话,你能在回答中贴一个工作样本吗?也许这会帮助我更好地理解。谢谢你!写得很好,容易理解。希望这也能帮助其他许多人:)
class Poem{

public $title;
public $lyrics;

}

$poem = new Poem;

$poem->title = "Look at the sea";
$poem->lyrics = "How blue, blue like the sky, in which we fly..."
sing($poem)