【问题标题】:PHP classes - is it preferable to use normal variables instead of properties?PHP 类 - 是否最好使用普通变量而不是属性?
【发布时间】:2015-06-11 07:22:38
【问题描述】:

对于我的最新网站,我一直在尝试使用类。主要是为了自学更多关于OOP的知识,并通过经验学习。

每当我在我的类中需要一个“变量”时,我都会创建一个属性,例如:

class someClass
{

var $valueToUseHere; // Only used internally - can I just use a variable?

    public function doStuff()
    {
        $this->valueToUseHere = 60;
    // Do more stuff here...
    }

}

直到现在,当我更多地研究代码并尝试进行一些优化时,我才注意到我的函数和类正在传递一些大对象。如果我将只在类内部使用的所有属性都变成普通变量,那么大部分内容可能会被剥离。

属性是否只用于类外需要的变量,然后只在类本身中使用“普通”变量是否可以接受?

很抱歉,如果这个问题表明对该主题缺乏了解。不幸的是,这是我目前学习的地方。我已经围绕“类属性与变量”等进行了一些搜索,但没有找到一个全面的答案。

非常感谢

【问题讨论】:

  • 你对“正常变量”的理解是什么?
  • “类属性”也是变量,也是正常的。
  • var $valueToUseHere; 这是在php中声明变量的方式吗?似乎是一种 javascript 方式。
  • @tning 这是旧的不推荐使用的属性声明语法,现在你应该使用publicprotectedprivate
  • var 的东西有点像 php,但它是 php4,因此真的有点被弃用了。请使用属性并将它们声明为公共或私有(或受保护)。不确定在您的情况下正常变量和属性之间有什么区别,因为我不确定是否存在?见php.net/manual/en/language.oop5.properties.php

标签: php class oop


【解决方案1】:

您的要求有些含糊,但如果valueToUseHere 未在doStuff 之外使用,则不要将其设为属性!

class someClass {

    public function doStuff() {
        $valueToUseHere = 60;
        // Do more stuff here...
    }

}

如果没有理由与类的其他方法或与外部世界共享该值,那么就没有理由用各种属性来混淆您的对象。这不仅可能导致保留状态的棘手错误,还迫使您对所有对象方法中的变量名过于小心。

【讨论】:

  • 感谢您提供的信息。也很高兴了解声明属性的新方法。谢谢:-)
【解决方案2】:

实际上类属性也是变量。基本上你有三个选择:

全局变量,随处可用,但不推荐,因为您的代码的所有部分都可能依赖于这样的变量,更改很容易在任何地方破坏东西。

类属性(注意:您应该定义可见性 - 公共/受保护/私有)这些属性绑定到对象实例,并且应该用于对象需要进一步保持的任何状态加工。通常这些可能会在你的课堂上不止一种方法中使用。

方法中的变量就像

public function doStuff()
{
    $valueToUseHere = 60;
    // Do more stuff here...
}

该变量仅在方法内部可用,并在方法执行结束时被丢弃。

【讨论】:

    【解决方案3】:

    这取决于您的需求。如果您只想在变量中保存一个值,那么最好保持它的简单性,而不是定义用于设置或获取它的值的函数。但有时您可能需要对类中的变量进行更多控制。例如,您定义了一个整数变量,并且您希望它的值始终在 10 到 1000 之间,并且它不应该在 100,200,300,..,900 之间。所以这里有一个很好的理由将你的变量访问设置为私有并创建一个公共函数来检查在设置新值之前需要什么。或者在另一个示例中,您可能想要在此变量更改后恰好调用另一个函数或更改您的类中的另一个依赖变量。或者,如果您想让变量始终为只读或只写,您可以定义用于控制变量值的属性。

    简而言之,您可能更喜欢使用:

    属性:当您想要控制获取和设置值时
    变量:当您想要设置或 >使用变量作为其性质

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多