如何设置公共变量。这是对的吗?:
class Testclass
{
public $testvar = "default value";
function dosomething()
{
echo $this->testvar;
}
}
$Testclass = new Testclass();
$Testclass->testvar = "another value";
$Testclass->dosomething();
答案 0 :(得分:24)
这是方法,但我建议为该变量编写一个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();
答案 1 :(得分:5)
使用构造函数。
<?php
class TestClass
{
public $testVar = "default value";
public function __construct($varValue)
{
$this->testVar = $varValue;
}
}
$object = new TestClass('another value');
print $object->testVar;
?>
答案 2 :(得分:4)
class Testclass
{
public $testvar;
function dosomething()
{
echo $this->testvar;
}
}
$Testclass = new Testclass();
$Testclass->testvar = "another value";
$Testclass->dosomething(); ////It will print "another value"
答案 3 :(得分:0)
内部class Testclass
:
public function __construct($new_value)
{
$this->testvar = $new_value;
}
答案 4 :(得分:0)
您正在“设置”该变量/属性的值。不会覆盖或超载它。你的代码是非常非常普通的。
所有这些术语(“设置”,“覆盖”,“过载”)都具有特定含义。覆盖和重载是关于多态的(子类化)。
来自http://en.wikipedia.org/wiki/Object-oriented_programming:
多态性允许程序员将派生类成员视为其父类成员。更确切地说,面向对象编程中的多态性是属于不同数据类型的对象响应同名方法的方法调用的能力,每个方法根据适当的类型特定行为进行响应。可以在许多不同情况下抽象地应用一种方法或诸如+, - 或*之类的运算符。如果命令狗说话(),这可能会引发吠叫()。但是,如果命令Pig说话(),这可能会引发一个oink()。它们都从Animal继承了speak(),但它们的派生类方法覆盖了父类的方法;这是覆盖多态性。重载多态性是使用一个方法签名或一个运算符(如“+”)来执行几个不同的功能,具体取决于实现。例如,“+”运算符可用于执行整数加法,浮点加法,列表串联或字符串连接。任何两个Number的子类,如Integer和Double,都应该以OOP语言正确地加在一起。因此,语言必须使加法运算符“+”重载才能以这种方式工作。这有助于提高代码的可读性。实现方式因语言而异,但大多数OOP语言至少支持某种程度的重载多态。
答案 5 :(得分:0)
对于重载,你需要一个子类:
class ChildTestclass extends Testclass {
public $testvar = "newVal";
}
$obj = new ChildTestclass();
$obj->dosomething();
此代码将回显newVal
。
答案 6 :(得分:0)
将getter和setter方法添加到您的班级。
public function setValue($new_value)
{
$this->testvar = $new_value;
}
public function getValue()
{
return $this->testvar;
}
答案 7 :(得分:0)
如果您要按照给出的示例(使用getter / setter或在构造函数中设置它)将其更改为private,因为这些是控制变量中设置的内容的方法。
将属性公开,并将所有这些内容添加到类中是没有意义的。