【问题标题】:C# out keyword meaning and does it have an equivalent in PHP? [duplicate]C# out 关键字含义和它在 PHP 中是否有等价物? [复制]
【发布时间】:2013-03-11 16:36:26
【问题描述】:

我正在尝试将此 C# 方法转换为 PHP。第二个参数中的out是什么意思?

public static bool Foo(string name, out string key)

【问题讨论】:

  • 首先,我不知道您为什么要使用外参数。所有 out 和 ref 参数都可以用简单的返回来替换。这提供了对输出的更多控制。
  • @GroundZero ...它已经返回了另一种类型。
  • @J.Steen 然后使用一个对象返回......如果您有一个应该返回名字和姓氏的方法,请使用包含这两个字符串的 Name 对象。这使用 out 和 return 解决了丑陋的代码。首先,应该避免使用 out/ref 并且你应该尽量避免使用 out/ref 和 return
  • @GroundZero:Int.TryParse 是一个很好的例子,当 out 可能是一个不错的选择时。但是,该方法确实可以返回将 bool 和 int 变量组合在一起的类型,但前一种方法在这里似乎更合适。
  • 我不认为这是一个重复的问题。他问怎么翻译成php

标签: c# php out


【解决方案1】:

Documentationref

public static function foo($str, &$key)
                                 ^
                                 | Pass by reference

请注意,在 C# 中,使用 out 时必须在调用方法中设置一个值,遗憾的是您不能直接将其转换为 PHP。

【讨论】:

  • @MadaraUchiha:他问如何将其转换为 PHP……我相信这很容易解释。
  • @llnk:如果这是不言自明的话,他不会提出问题,你也不会将ref 等同于out ;-)
  • 这不是自我解释的。问题主要询问out 关键字的含义。转换是次要的。 ,作为一个不懂C#的人,我不知道out参数是什么意思,所以你的问题对我来说没有什么价值。
  • @Madara:我写过引用传递,我相信引用传递是不言自明的......你不觉得吗?
  • @MadaraUchiha:好的,我很欣赏建设性的讨论 :)
【解决方案2】:

out关键字指定参数必须由被调用的方法赋值,赋值的值会传回给调用方法。查看MSDN 了解更多信息。

我不认为 PHP 具有所需的赋值行为的等效项,但如果您正在转换方法主体并在内部维护该行为,您应该能够将其转换为常规的按引用传递参数并维护相同的功能。

【讨论】:

    【解决方案3】:

    一点点谷歌搜索把我带到了这个网站:http://www.php.net/manual/en/language.references.pass.php

    如您所知,参数是变量的副本。 这意味着您实际上不会更改变量本身。
    例如:

    <?php
        function foo($bar) {
            $bar++;
        }
    
        $bar = 5;  // $bar = 5
        foo($bar); // $bar = 6
    
        echo $bar; // $bar = 5
    ?>
    

    虽然这段代码实际上会改变给定的变量,就像使用引用一样。

    <?php
        function foo(&$bar) {
            $bar++;
        }
    
        $bar = 5;  // $bar = 5
        foo($bar); // $bar = 6
    
        echo $bar; // $bar = 6 now
    ?>
    

    注意:这不是 C# 中 out-parameter 的精确 PHP 版本

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2013-06-21
      • 2019-02-09
      相关资源
      最近更新 更多