簡體   English   中英

在PHP中的對象類型提示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM