【问题标题】:PHP: Difference between -> and :: [duplicate]PHP:-> 和 :: [重复] 之间的区别
【发布时间】:2011-11-23 09:09:33
【问题描述】:

可能重复:
In PHP, whats the difference between :: and ->?

在 PHP 中,使用箭头 -> 和范围解析运算符 :: 在类中调用 function() 的主要区别是什么?

更多清关,区别:

$name = $foo->getName();
$name = $foo::getName();

Scope Resolution Operator :: 的主要利润是什么?

【问题讨论】:

    标签: php function scope


    【解决方案1】:
    $name = $foo->getName();
    

    这将调用对象$foo的成员或静态函数,而

    $name = $foo::getName();
    

    将调用$foo 类的静态函数。如果你想这样称呼它,使用:: 的“利润”是能够访问类的静态成员,而无需此类的对象实例。也就是说,

    $name = ClassOfFoo::getName();
    

    【讨论】:

    • :: 可以被static 班级成员访问???哇!这么多利润! :D 谢谢哥们,K-ballo
    • 如果:: 可以访问static 会员,那么static 有什么好处呢??我认为这只是 PHP 中的一种非结构化方式 :(
    • 您似乎将static 与其他东西混淆了,在所有语言中都有访问类的静态(公共)成员的方法。
    • 可以在此处找到有关此主题的更详细答案:stackoverflow.com/a/17027307/4126723
    【解决方案2】:
    • -> 被调用以访问实例的方法(或实例化对象的变量)
    • :: 用于访问未实例化对象的静态函数

    【讨论】:

      【解决方案3】:

      它们用于不同的函数类型。 -> 始终用于静态和非静态方法的对象(尽管我认为将 -> 用于静态方法并不是一个好习惯)。 :: 仅用于静态方法,可用于对象(自 PHP 5.3 起)更重要的是类

      <?php
      
      class aClass {
          static function aStaticMethod() {}
          function aNormalMethod() {}
      }
      
      $obj = new aClass();
      $obj->aNormalMethod(); //allowed
      $obj->aStaticMethod(); //allowed
      $obj::aStaticMethod(); //allowed as of PHP 5.3
      $class_name = get_class( $obj );
      $class_name::aStaticMethod(); //long hand for $obj::aStaticMethod()
      aClass::aStaticMethod(); //allowed
      //aClass::aNormalMethod(); //not allowed
      //aClass->aStaticMethod(); //not allowed
      //aClass->aNormalMethod(); //not allowed
      

      【讨论】:

      • $obj-&gt;aStaticMethod(); //allowed 允许???伙计,我对-&gt; 感到困惑。你确定-&gt; 是允许的吗?
      • 尝试运行脚本。它有效,但并不是真正的最佳实践。
      猜你喜欢
      • 2011-05-29
      • 2013-03-11
      • 2011-11-05
      • 2015-03-08
      • 1970-01-01
      • 2014-08-16
      • 2011-04-08
      • 2012-11-24
      • 2013-06-05
      相关资源
      最近更新 更多