【问题标题】:What does "->" mean/refer to in PHP? [duplicate]PHP 中的“->”是什么意思? [复制]
【发布时间】:2011-05-29 00:06:42
【问题描述】:

-> 在 PHP 中是什么意思?

在 WordPress 的以下内容中,例如,我知道 if 语句的作用,但 -> 的作用是什么?

<?php if ( $wp_query->max_num_pages > 1 ) : ?>   

【问题讨论】:

  • @Jimmy 最有趣的是您的 Google 查询没有返回任何有用的信息。在你再次拉这个之前,你可能应该在你的谷歌技能上工作
  • 是的,我意识到......但有可能绕过没有结果
  • @Jimmy LMGTFY 不鼓励这样做
  • $object-&gt;property, $object-&gt;method() ... 属性基本上是类/对象变量,而方法是类/对象函数。
  • “重复问题”参考指向链接到该问题的页面。这有点尴尬。

标签: php oop syntax


【解决方案1】:

-&gt; 访问对象的成员。所以$wp_query-&gt;max_num_pages 正在访问对象$wp_query 中的字段max_num_pages。可用于访问属于对象的方法或字段,如果你熟悉C++或Java,则相当于myObject.myField

【讨论】:

  • 亲爱的。点击进入太快。所以像&lt;?php if ( $comment-&gt;comment_approved == '0' ) : ?&gt; 这样的东西真的是在说:&lt;?php $comment = function stuff if $comment_approved =='0' { do something else in here }else{ do this other thing } ?&gt;
  • @saltcod 您可以在 cmets 发布后 5 分钟内对其进行编辑。这就是说,在这个对象$comment 中,如果评论没有被批准,就做一些事情,否则做一些完全不同的事情。你几乎把它放下了。对象很酷,因为您可以将有关对象的大量相关信息存储在方便、合乎逻辑的位置(如评论作者、评论文本、是否被批准、何时离开等)跨度>
  • 所以基本上,只需命名对象并使用-&gt; 将其“指向”函数,它就可以替换长格式的 if-else 语句?
  • @saltcod 它使您免于定义一堆没有真正关联的不同相关变量。这样,当您想要有关评论的信息时,您就有了一个很好的地方可以查看。面向对象编程是一个大概念,最好在 php.net/manual/en/language.oop5.php 学习
【解决方案2】:

首先您应该了解以下内容。在 PHP 和许多其他语言中,我们有以下类型的实体:

  • 变量
  • 数组
  • 对象

-&gt; 允许您访问对象中的方法或值,就像[] 允许您访问数组中的值一样。

一个类就像一个盒子,盒子里面有很多项目,每个项目都可以在同一个盒子中相互交互。

例如:

class Box
{
    function firstItem()
    {

    }


    function secondItem()
    {

    }
}

以上就是我们所说的类。它基本上是一段结构化的代码,在变成对象之前不会真正做任何事情。

对象是使用new关键字创建的,它实例化一个类并从中创建一个对象。

$box = new Box;

现在上面的$box,这是一个从Box类创建的对象,里面有方法,比如firstItem()

这些就像函数一样,除了它们之外,我们还有另一个名为 $this 的变量,它用于访问该对象中的其他方法。

现在要从对象外部访问方法,您必须使用问题中描述的运算符。

$box->firstItem();

运算符-&gt; 将允许您从变量$box 执行方法。

【讨论】:

  • 没错,所有这些都在这里阅读。 codex.wordpress.org/Function_Reference/WP_Query
  • 啊。甜的!再次感谢。
  • 这是一个非常简洁的答案,也提供了一个惊人的例子,绝对帮助我理解到底发生了什么!
  • 这个答案真的很神奇。谢谢!
  • 这让我更了解如何使用$this。您对:: 的含义有类似的回答吗?
【解决方案3】:

就像 JavaScript 和 Java 中的句点 (.)。它只是一个简单的访问运算符。

【讨论】:

    【解决方案4】:

    -> 用于访问对象的方法和属性。请参阅PHP manual on classes and objects

    【讨论】:

    • 谢谢。我担心它会是对象和类。
    • @saltcod 为什么?对象和类通常很不错:)
    • 一个属性可能是另一个对象。
    • 不要害怕对象和类,它们是你的朋友 :D
    【解决方案5】:

    它访问左边的对象的成员,右边的名字。

    【讨论】:

      【解决方案6】:

      它访问对象的成员; $obj->prop 访问 $obj 变量中任何对象的“prop”属性。

      在许多其他编程语言中,为此目的使用句点:例如 obj.prop 或 obj.method()。

      【讨论】:

        【解决方案7】:

        这就是 PHP 处理对象的方式。本质上,$wp_query 是一个对象,它具有可以通过 -&gt; 字符访问的方法(函数)和属性。

        PHP 不是从对象开始的,所以您现在将其视为事后的想法。我发现-&gt; 是一种处理它的混乱方式,与使用基础对象构建的 Ruby 相比。

        您可以在以下位置找到更多信息:http://php.net/manual/en/language.oop5.php

        【讨论】:

          【解决方案8】:

          这很容易理解。

          在 PHP 中,我们使用 -> 来访问在类中定义的方法/属性。

          因此,在您的情况下($wp_query->max_num_pages),您正在尝试获取 max_num_pages 的值,它是 $wp_query 类的变量。

          $wp_query 定义当前请求的对象信息,然后 $wp_query 确定它正在处理的查询类型(可能是类别存档、日期存档、提要或搜索),并获取请求的帖子。它保留了大量关于请求的信息,可以在以后提取。

          【讨论】:

            【解决方案9】:
            <?php
            class Main{
             private $name = 'My Name is Febri.<br/>';
             private function print_name(){
              echo $this -> name;
             }
            }
            
            class Descend extends Main{
             function print(){
              $this -> print_name();
             }
            }
            
            $try = new Descend;
            $try -> print();
            echo $try -> name;
            ?>
            

            从上面的例子中,我们不能调用私有 print_name 方法的函数。另外,我们也不能调用设置为私有属性的name变量。

            【讨论】:

              【解决方案10】:

              -&gt; 主要用于访问对象的字段。类似于 Java 中的属性。

              例如。

              class Student {
              String name;
              int rollno;
              }
              

              Student.name 访问给定学生对象的名称。

              【讨论】:

                【解决方案11】:

                使用-&gt;访问对象中的字段、方法,它与数组变量中的[]平行($array['field']$object-&gt;field)。例如,在 WP 中,您将在 $post 上使用它,因为它是一个对象。

                【讨论】:

                  【解决方案12】:

                  $object-&gt;property 用于访问任何对象的属性。

                  【讨论】:

                  • 发布三年前基本上所有其他答案已经说过的东西通常不好。你应该引入一些新的东西来保证新的答案。
                  猜你喜欢
                  • 2011-05-31
                  • 2011-01-17
                  • 2013-09-26
                  • 1970-01-01
                  • 2011-08-10
                  • 1970-01-01
                  • 2015-04-20
                  • 2020-10-27
                  相关资源
                  最近更新 更多