2009-12-30 109 views
10

如何设置公共变量。这是正确的?:设置公共类变量

class Testclass 
{ 
    public $testvar = "default value"; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); 
+3

你的方式是好的 – Greg 2009-12-30 17:52:17

回答

21

这是这样,但我会建议为该变量写一个getter和setter。

class Testclass 

{ 
    private $testvar = "default value"; 

    public function setTestvar($testvar) { 
     $this->testvar = $testvar; 
    } 
    public function getTestvar() { 
     return $this->testvar; 
    } 

    function dosomething() 
    { 
     echo $this->getTestvar(); 
    } 
} 

$Testclass = new Testclass(); 

$Testclass->setTestvar("another value"); 

$Testclass->dosomething(); 
+4

带setter和getter,你应该把$ testvar设置为private :) – nXqd 2011-07-05 01:15:23

+0

哦,是的,那样会更合适。感谢您指出。 – marvin 2011-07-11 10:56:44

+1

你为什么这么建议?这是现在过时还是一个好方法? – tehlivi 2017-10-11 15:40:41

0

class Testclass

public function __construct($new_value) 
{ 
    $this->testvar = $new_value; 
} 
0

你 “设置” 变量/属性的值。不重写或重载它。你的代码非常非常普通。

所有这些术语(“set”,“override”,“overload”)都有特定的含义。覆盖和重载是关于多态(子类化)。

http://en.wikipedia.org/wiki/Object-oriented_programming

多态性使程序员可以把派生类成员只是他们的父类的成员等。更确切地说,面向对象编程中的多态性是属于不同数据类型的对象响应相同名称方法的方法调用的能力,每个方法根据适当的类型特定行为进行响应。一种方法或运算符(如+, - 或*)可以抽象地应用于许多不同的情况。如果一个狗被命令说(),这可能会引发一个树皮()。然而,如果猪被命令说(),这可能会引发一个oink()。它们都继承了Animal的speak(),但它们的派生类方法覆盖了父类的方法;这是覆盖多态性。重载多态性是使用一个方法签名或一个操作符(如“+”)根据实现来执行几个不同的函数。例如,“+”运算符可用于执行整数加法,浮点加法,列表级联或字符串级联。 Number的任何两个子类,例如Integer和Double,都应该在OOP语言中正确添加。因此,语言必须重载加法运算符“+”,以这种方式工作。这有助于提高代码的可读性。实现方式因语言而异,但大多数OOP语言至少支持某种程度的重载多态。

+0

是啊......只是用错了长期 – Cudos 2009-12-30 17:42:19

+0

Overload和Override和设置都有特定的含义。你有没有得到你正在寻找的关于你的代码的答案?或者您是否正在专门查找有关重载的信息? – 2009-12-30 17:45:28

+0

刚刚看到您最近编辑的问题。你做对了。正如其他人所说的,如果你愿意,你可以使用get和set方法,但是你不需要。它们具有优势,特别是在设置数据之前需要验证数据是否属于某种类型。 – 2009-12-30 17:50:59

0

重载你需要一个子类:

class ChildTestclass extends Testclass { 
    public $testvar = "newVal"; 
} 

$obj = new ChildTestclass(); 
$obj->dosomething(); 

此代码将回声newVal

0

将getter和setter方法添加到您的班级。

public function setValue($new_value) 
{ 
    $this->testvar = $new_value; 
} 

public function getValue() 
{ 
    return $this->testvar;   
} 
2

使用构造函数。

<?php 
class TestClass 
{ 
    public $testVar = "default value"; 
    public function __construct($varValue) 
    { 
     $this->testVar = $varValue;    
    } 
}  
$object = new TestClass('another value'); 
print $object->testVar; 
?> 
+0

你的代码没有意义,它不会输出任何东西 – Greg 2009-12-30 17:53:05

+2

现在检查,我把testvar改成testVar – 2009-12-30 17:57:45

0

如果你要遵循给出的例子(使用的getter/setter或在构造函数中设置它)将其更改为私有,因为这些办法控制什么是变量设置。

将所有这些东西添加到课堂中让公共属性公开是没有意义的。

4
class Testclass 
{ 
    public $testvar; 

    function dosomething() 
    { 
    echo $this->testvar; 
    } 
} 

$Testclass = new Testclass(); 
$Testclass->testvar = "another value";  
$Testclass->dosomething(); ////It will print "another value"