[英]object type hinting in php
我需要幫助理解對象的類型提示。 我嘗試搜索stackoverflow但找不到任何其他用戶解釋其使用的東西。 如果你找到一個讓我知道。 首先讓我解釋一下我的理解。
當使用類型提示數組時,用戶必須輸入一個數組參數,否則會引發錯誤。
<?php
function something(array $myval)
{
return print_r($myval);
}
當我用對象嘗試它時,我得到一個錯誤。 我可能寫錯了,但請幫助我理解如何寫它。
<?php
class Person
{
function name($name)
{
return $name;
}
}
$foo = new Person();
function doSomething(Person $lname)
{
return $lname->name;
}
doSomething('smith');
根據我的理解,當一個函數類型提示對象Person(在這個例子中)時,參數變量將有權訪問對象方法,就像實例化一個對象並回顯其方法一樣。 我錯了,但請糾正我。 我的另一個問題是,如果在Person參數可以訪問Person方法的情況下這是真的,那么這與僅僅實例化Person類並手動回顯方法有什么不同。
使用你的例子:
$foo = new Person;
$foo->name = 'smith';
$something = doSomething($foo);
echo $something;
類型提示意味着您傳遞的任何內容必須是您提示的類型(與其類型相同)的實例。
因此,如果您提示Person
則只接受該類型的對象。
在您給出的示例中,您嘗試傳遞字符串而不是對象。
更新
“類型提示”強制您僅傳遞特定類型的對象。 這可以防止您傳遞不兼容的值,並在您與團隊等合作時創建標准。
所以,假設你有一個函數sing()
。 您希望確保它只接受Song
類型的對象。
讓我們創建我們的課程Song
:
class Song{
public $title;
public $lyrics;
}
和我們的功能唱歌()。 我們將向Song
輸入提示,以確保不能將任何其他類型的參數傳遞給它:
function sing(Song $song){
echo "Singing the song called " .$song->title;
echo "<p>" . $song->lyrics . "</p>";
}
現在,再一次,該函數只能接受Song
類型的對象,因為這是我們在聲明中所暗示的( Song $song
)。
讓我們創建一首歌並傳遞它:
$hit = new Song;
$hit->title = "Beat it!";
$hit->lyrics = "It doesn't matter who's wrong or right... just beat it!";
然后我們打電話:
sing($hit);
哪個會好起來的。
現在,讓我們說我們有一首Poem
:
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()
時暗示的對象類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.