对于我的最新网站,我一直在尝试使用课程。主要是为了更多地了解OOP并通过经验学习。
每当我在课堂上需要一个'变量'时,我就创建了一个属性,例如:
class someClass
{
var $valueToUseHere; // Only used internally - can I just use a variable?
public function doStuff()
{
$this->valueToUseHere = 60;
// Do more stuff here...
}
}
直到现在,我一直在查看代码并尝试进行一些优化,我注意到我的函数和类传递了一些大对象。如果我将所有仅在类中使用的属性变为普通变量,那么很多大量的东西都会被剥夺。
属性是否仅用于类外部所需的变量,是否可以在类本身中使用“普通”变量?
很抱歉,如果这个问题说明对这个问题缺乏了解。不幸的是,这是我此时学习的地方。我已经做了一些搜索“类属性与变量”等但没有找到一个全面的答案。
非常感谢
答案 0 :(得分:4)
您提出的问题有些模糊,但如果valueToUseHere
未在doStuff
之外使用,则不要将其作为财产!
class someClass {
public function doStuff() {
$valueToUseHere = 60;
// Do more stuff here...
}
}
如果没有理由与该类别的其他方法或外部世界分享该值,那么就没有理由用各种属性来混淆你的对象。这不仅可能导致保留状态的棘手错误,还会迫使您对所有对象方法中的变量名称进行不必要的小心。
答案 1 :(得分:3)
实际上,类属性也是变量。基本上你有三个选择:
全局变量,可在任何地方使用,但不建议使用,因为代码的所有部分都可能依赖于这样的变量,更改很容易在任何地方破坏。
类属性(注意:您应该定义可见性 - public / protected / private)这些属性绑定到对象实例,并且应该用于对象需要保留的任何状态以进一步处理。通常那些可能会在你班级的多个metohd中使用。
方法中的变量,只需
public function doStuff()
{
$valueToUseHere = 60;
// Do more stuff here...
}
该变量仅在方法内可用,并在方法执行结束时被抛弃。
答案 2 :(得分:1)
这取决于您的需求。如果您只想在变量中保存一个值,那么最好保持它的简单性,而不是定义用于设置或获取它的值的函数。但有时您可能需要对类中的变量进行更多控制。例如,您已经定义了一个整数变量,并且您希望它的值始终在10到1000之间,并且它不应该在100,200,300,...,900中。所以这里有一个很好的理由将变量访问权限设置为private并创建一个公共函数来检查在设置新值之前需要什么。或者在另一个示例中,您可能希望在此变量更改后调用另一个函数或更改类中的另一个依赖变量。或者,如果要将变量设置为只读或只写,则可以定义用于控制变量值的属性。
简而言之,您可能更愿意使用:
属性:当您希望控制get和set 值时 变量:当您想要设置或使用变量作为其性质时