【问题标题】:Are there "magic functions" for powershell objects?powershell 对象是否有“神奇功能”?
【发布时间】:2013-07-26 20:47:33
【问题描述】:

在 PHP 中,如果您需要,可以使用“魔法方法”。这方面的一个示例是 __toString() 方法,如果一段代码尝试回显对象,则该方法用于回显特定字符串。这是一个使用 PHP 的示例:

<?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 中是否有一个“神奇的功能”可以做到这一点?

【问题讨论】:

  • 我对 PHP 了解不多,但是……那是怎样的“魔法”?如果您需要,是否存在?在我看来,它就像一个简单的函数覆盖,就像你在 Javascript 或 Java 中所做的那样,所以如果你声明它,它就会一直存在。
  • 我认为几乎所有 PowerShell 对象都提供了一个方法 ToString(),如果这是你的问题的话。
  • @Renan 我调用了一个魔法函数,因为 PHP 就是这么称呼它们的:php.net/manual/en/language.oop5.magic.php。就我而言,我将创建具有许多不同属性的对象。我想缩短我的代码,使用类似Write-Output $MyObj 的东西,然后回显"My Custom String"。我可以将字符串修改为我想要的任何内容,这可能只是使用它的一些属性对对象的摘要。

标签: powershell powershell-2.0 magic-function


【解决方案1】:

PowerShell 中的所有默认 PSObject 都有一个 ToString() 方法,如果您在脚本(而不是代码)中创建自定义对象,那么您将拥有该方法。您需要做的就是使用 Add-Member 覆盖 ToString() 方法。

请参阅this question 了解详细说明。

您可以通过将对象的实例通过管道传递给 Get-Member 来查看自定义对象具有哪些成员。

【讨论】:

  • 这可行,但我正在寻找一种无需使用echo $MyObject.ToString() 的方法。如果我想不出像echo $MyObject 这样的方法,这绝对是最好的选择。谢谢!
  • 只需执行 "$MyObject" -- 将对象放在引号中会导致 PowerShell 自动调用 ToString() 方法。实际上,只要 PowerShell 需要将对象表示为文本,它就会调用 ToString()。我想不出您需要自己调用 ToString() 方法的情况。试一试,我想你会对结果感到满意。
猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多