几个PHP问题(echo/OO-PHP)

几个PHP问题(echo/OO-PHP),php,Php,我学习了一点OO PHP,但我遇到的文档展示了以下示例的两种方法。我不明白为什么这两种方法都有效,而且哪种方法应该专门使用 我知道1不是OOP,但我仍然好奇echo的第二种方法,以及是否应该使用它 下面两个echo都打印lanana,但其中一个在echo之前初始化$name,而另一个在echo之后或期间初始化它 <?php $name = "Lansana"; echo $name; echo $name = "Lansana"; ?> 1和2中的首选方法是什么,为什么?我不

我学习了一点OO PHP,但我遇到的文档展示了以下示例的两种方法。我不明白为什么这两种方法都有效,而且哪种方法应该专门使用

我知道1不是OOP,但我仍然好奇echo的第二种方法,以及是否应该使用它

下面两个echo都打印lanana,但其中一个在echo之前初始化$name,而另一个在echo之后或期间初始化它

<?php

$name = "Lansana";
echo $name;

echo $name = "Lansana";

?>

1和2中的首选方法是什么,为什么?我不知道为什么文档显示了第一类方法,因为我不认为那里需要公共属性,但是我知道什么。

我认为1只是一个快捷方式。2是因为重载,类变量是动态创建的

至于首选方法,1'echo$name='Something'`与其说是另一种方法,不如说是一种捷径。两种情况的最终结果都是一样的


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

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

至于首选方法,1'echo$name='Something'`与其说是另一种方法,不如说是一种捷径。两种情况的最终结果都是一样的

对于2,动态创建变量通常不是一个好主意,因为它可以生成一些意外的结果,但它们确实有自己的位置。查看上面的链接,了解一些使用重载的代码示例。首选第一种方法。

1 PHP将其解释为

echo ($name = "Lansana");
echo有点像一个函数,因为php在将其发送到standard out之前会解释echo右侧的所有内容

2. 第一种方法绝对是最好的方法。因为PHP是一种动态语言,而不是像C或Java这样的静态语言,所以它允许创建和设置变量,而无需先声明变量。最好总是声明类变量,这样代码更易于阅读和维护。

1 PHP将其解释为

echo ($name = "Lansana");
echo有点像一个函数,因为php在将其发送到standard out之前会解释echo右侧的所有内容

2.
第一种方法绝对是最好的方法。因为PHP是一种动态语言,而不是像C或Java这样的静态语言,所以它允许创建和设置变量,而无需先声明变量。最好总是声明类变量,这样可以使代码更易于阅读和维护。

认为我应该为我在上述注释中概述的内容提供更多的上下文

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

对于第二个示例,如我在注释中所述,明确定义属性始终是可取的。优点是:

大多数IDE将为您自动完成定义的属性,从而最大限度地降低键入错误属性的风险。 它清楚地指示阅读代码的人对象上有哪些可用的属性。 它允许您设置属性的可见性,以便您可以更好地控制类的使用方式,从而促进封装。 OO PHP中最常见的一个bug是在静默创建属性时,例如:

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

    public function getUserId(){
        return $this->userid;
    }
}
这里的意图是明确的,但是您必须非常密切地注意这样一个事实,即引用的属性的大小写是不同的。如果再输入50行代码,而两个属性引用不同时出现在屏幕上,则If将变得更加困难

PHP的magic _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");
    }
}

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

我想我应该给我在上面的评论中概述的内容多一些背景

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

对于第二个示例,如我在注释中所述,明确定义属性始终是可取的。优点是:

大多数IDE将为您自动完成定义的属性,从而最大限度地降低键入错误属性的风险。 它清楚地指示阅读代码的人对象上有哪些可用的属性。 它允许您设置属性的可见性,以便您可以更好地控制类的使用方式,从而促进封装。 OO PHP中最常见的一个bug是在静默创建属性时,例如:

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

    public function getUserId(){
        return $this->userid;
    }
}
意图 t在这里很清楚,但是您必须非常密切地注意这样一个事实,即引用的属性的大小写是不同的。如果再输入50行代码,而两个属性引用不同时出现在屏幕上,则If将变得更加困难

PHP的magic _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,请不要同时分配和输出。。。这令人困惑。对于2,始终支持明确性,因此定义并指定属性的可见性。。。如果没有其他原因,它允许IDE自动完成正确的变量名。也不要让我通读整个类定义来试图发现Object2上存在哪些公共属性,所以对于2,首选第一个类方法,对吗?显式定义的属性总是有利的。。。一些最常见的OO-PHP错误来自于PHP在运行时默默地创建属性,而不是在编译时发出错误或警告。感谢大家的提醒!人们想知道为什么这种语言被认为是丑陋的,请不要同时分配和输出。。。这令人困惑。对于2,始终支持明确性,因此定义并指定属性的可见性。。。如果没有其他原因,它允许IDE自动完成正确的变量名。也不要让我通读整个类定义来试图发现Object2上存在哪些公共属性,所以对于2,首选第一个类方法,对吗?显式定义的属性总是有利的。。。一些最常见的OO-PHP错误来自于PHP在运行时默默地创建属性,而不是在编译时发出错误或警告。感谢大家的提醒!人们想知道为什么这种语言被认为是丑陋的