2013-07-26 75 views
0

在PHP中,如果你需要它們,就有「神奇的方法」存在。例如__toString()方法用於在某段代碼嘗試回顯對象時回顯出特定的字符串。這是一個例子使用PHP:Powerhell對象有「魔術功能」嗎?

<?php 
// Declare a simple class 
class TestClass 
{ 
    public $foo; 

    public function __construct($foo) 
    { 
     $this->foo = $foo; 
    } 

    public function __toString() 
    { 
     return $this->foo; 
    } 
} 

$class = new TestClass('Hello'); 
echo $class; 
?> 

這將返回:

Hello 

是否有一個 「神奇的功能」,將在PowerShell中這樣做嗎?

+0

我不知道太多的PHP,但...這是什麼「魔法」?現有如果你需要它?在我看來,像一個簡單的函數覆蓋,就像你在Javascript或Java中所做的一樣,所以如果你聲明它,它總是存在的。 – Renan

+0

我認爲幾乎所有的PowerShell對象都提供了一個'ToString()'方法,如果這是你的問題。 –

+0

@Renan我打電話給一個神奇的功能,因爲這就是PHP所稱的:http://php.net/manual/en/language.oop5.magic.php。 就我而言,我將創建具有許多不同屬性的對象。我想縮短我的代碼,使用'Write-Output $ MyObj',然後回顯'「我的自定義字符串」'。我可以將字符串修改爲任何我想要的,這可能只是使用它的某些屬性的對象摘要。 – EGr

回答

4

PowerShell中的所有默認PSObjects都有一個ToString()方法,如果您使用腳本(而不是代碼)創建自定義對象,那麼您將要使用此方法。您只需要使用Add-Member來覆蓋ToString()方法。

請參閱this question以獲得對此的確切說明。

通過將對象實例管道到Get-Member,您可以看到自定義對象具有哪些成員。

+0

這有效,但我正在尋找一種方法來做到這一點,而不必使用'echo $ MyObject.ToString()'。如果我找不到像'echo $ MyObject'這樣的方法,這絕對是最好的選擇。謝謝! – EGr

+2

只要執行「$ MyObject」 - 將對象放在引號中,PowerShell就會自動調用ToString()方法。真的任何時候PowerShell需要將對象表示爲文本,它會調用ToString()。我想不出你需要自己調用ToString()方法的情況。試試看,我認爲你會對結果感到滿意。 – jbsmith

+0

太棒了,謝謝! – EGr