一些PHP问题(echo / OO PHP)

时间:2015-07-30 03:23:13

标签: php

我学习了一些OO PHP,但我遇到的文档显示了以下示例中的几种方法。我很困惑为什么两者都有效,哪些应该专门使用。

我知道#1不是OOP但我仍然对第二种echo方法感到好奇,是否应该使用它。

  1. 以下两个echo都打印“Lansana”,但是一个在回声之前初始化$name,而另一个在回声之后(或期间)初始化它。

    <?php
    
    $name = "Lansana";
    echo $name;
    
    echo $name = "Lansana";
    
    ?>
    
    1. 请注意第一个示例中的公共属性$name没有值,第二个示例中没有公共属性,但两者仍然相同。

      class Pets
      {
          public $name;
      
          public function __construct($name) {
              $this->name = $name;
          }
      }
      
      $dog = new Pets("Buddy");
      echo $dog->name;
      
      class Pets
      {
          public function __construct($name) {
              $this->name = $name;
          }
      }
      
      $dog = new Pets("Buddy");
      echo $dog->name;
      
    2. #1和#2中的首选方法是什么?为什么?我不知道为什么文档显示了第一类方法,因为我没有看到那里需要公共财产,但是我又知道了什么。

3 个答案:

答案 0 :(得分:2)

我想我应该对上面评论中概述的内容给出更多背景信息。

对于第一个示例,尽量不要在同一语句中混合赋值和输出。虽然它在语法上是正确的,但它并不能立即表明该语句的意图。

对于第二个例子,我在评论中明确定义属性总是更可取的。优点是:

  1. 大多数IDE会自动完成定义的属性,以最大限度地降低错误输入属性的风险。
  2. 它清楚地向读取代码的人表明对象上可用的属性。
  3. 它允许您设置属性的可见性,以便您可以控制更多类的使用方式,从而促进封装。
  4. 您在OO PHP中看到的最常见错误之一是您静默创建属性,例如:

    class A {
        public function setUserId($id){
            $this->userId = $id;
        }
    
        public function getUserId(){
            return $this->userid;
        }
    }
    

    这里的意图很清楚,但你必须非常密切关注引用的属性是否有所不同。如果你输入另外50行代码并且同时在屏幕上没有两个属性引用变得更难。

    关于PHP的使用魔法__get和__set方法有助于在开发早期消除这个问题。示例:

    class A {
        public $foo;
        public $bar;        
    
        public function __set($prop, $val){
            throw new Exception ($prop." does not exist on this object");
        }
    
        public function __get($prop){
            throw new Exception ($prop." does not exist on this object");
        }
    }
    

    这使得如果您尝试访问未定义的属性,该类将抛出异常,让您确切知道发生了什么以及在哪里。

答案 1 :(得分:1)

我认为#1只是一个捷径。 #2是因为重载,其中类变量是动态创建的。

http://www.php.net/manual/en/language.oop5.overloading.php

至于首选方法,#1'echo $ name ='Something'更多的是捷径,而不是不同的方法。在任何一种情况下,最终结果都是相同的。

对于#2,动态创建的变量通常不是一个好主意,因为它可以产生一些意想不到的结果,但它们确实有它们的位置。请查看上面的链接,了解使用重载的代码示例。第一种方法很受欢迎。

答案 2 :(得分:1)

1

echo $name = "Lansana";

PHP将其解释为

echo ($name = "Lansana");

echo类似于函数,因为php在将其发送到标准输出之前解释了echo右侧的所有内容。

2

第一个肯定是最好的方式。因为PHP是一种动态语言(而不是像C#或Java 这样的静态语言),它允许创建和设置变量而不首先声明它们。总是声明类变量是最好的 - 它使代码更容易阅读和维护。