1

我的问题很简单,我在课堂上看到了这段代码:

class controller_activity {
    function __construct($args) {
        //the variable template is not defined or what happen??
        $this->template = new Template('activity');     
    }
    .......

通常我在“public $template”之类的类中看到变量的声明或类似的,但是这种情况下,如果我像往常一样定义这些变量,我可以直接添加变量吗?之前没有定义它们?,值得推荐吗?

4

4 回答 4

1

如果我像往常一样定义这些变量,是否相同?

不,缺少定义。get_object_vars会显示他们,但get_class_vars不会。

我可以直接用这种方式添加变量吗?

是的,这是可能的。它们将是公开可见的。

之前没有定义它们?

是的,之前没有定义它们。它们将是公开可见的。

值得推荐吗?

那要看。通常不会,但这条规则也有例外。

于 2013-01-24T14:56:25.787 回答
1

我认为这段代码有效的原因是因为$this->template分配发生在__construct()类实例化时几乎立即发生。所以这可以被看作是一种草率的——但可以伪造的——进行变量赋值的方式。但这对以后的可读性或调试没有帮助。所以答案是肯定的,你可以这样做。这是“最佳实践”吗?100% 没有。

于 2013-01-24T14:57:05.197 回答
1

虽然不推荐,但 PHP 及其对变量的非约束(弱类型)使用意味着可以动态声明类变量。

我曾多次意外地做到了这一点,但后来又回过头来正确地定义了它们。默认情况下,它们将具有public访问方法(与在类的头部不包括访问方法的行为相同,即$var = 0vs private $var = 0)。

同样,不建议这样做。我没有专门测试过它,但我想他们会抛出一个Notice错误。另一个问题是,这样做会使代码更难遵循,无论是以后自己还是尝试使用您的课程的其他开发人员。

于 2013-01-24T15:00:11.013 回答
1

您发布的代码将毫无问题地工作。

在 PHP 中,您可以使用未声明的变量。在其他语言(如 Java)中,您不能使用未声明的变量。这只是风格问题,但我个人不喜欢使用它们。

请注意,如果在您的示例中未声明模板 var,则具有公共可见性

于 2013-01-24T15:04:15.837 回答