Как я устанавливаю общедоступную переменную. Это корректно?:
class Testclass
{
public $testvar = "default value";
function dosomething()
{
echo $this->testvar;
}
}
$Testclass = new Testclass();
$Testclass->testvar = "another value";
$Testclass->dosomething();
так, но я бы предложил написать геттер и сеттер для этой переменной.
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();
Использовать конструкторы.
<?php
class TestClass
{
public $testVar = "default value";
public function __construct($varValue)
{
$this->testVar = $varValue;
}
}
$object = new TestClass('another value');
print $object->testVar;
?>
Для перегрузки нужен подкласс:
class ChildTestclass extends Testclass {
public $testvar = "newVal";
}
$obj = new ChildTestclass();
$obj->dosomething();
Этот код будет перекликаться с newVal
.
Вы "настраиваете" значение этой переменной/атрибута. Не переопределяйте и не перегружайте ее. Ваш код очень, очень распространен и нормален.
Все эти термины ("set", "override", "overload") имеют специфические значения. Переопределение и перегрузка - это полиморфизм (подкласс).
Из http://en.wikipedia.org/wiki/Object-oriented_programming :
Полиморфизм позволяет программисту относиться к производным членам класса точно так же, как и к членам родительского класса. Точнее, полиморфизм в объектно-ориентированном программировании - это способность объектов, принадлежащих к разным типам данных, реагировать на вызовы одноименных методов, каждый из которых соответствует соответствующему типу специфического поведения. Один метод или оператор, такой как +, - или *, может быть абстрактно применен в различных ситуациях. Если Собака получает команду speak(), то это может вызвать функцию bark(). Однако, если Свинья получает команду speak(), это может вызвать функцию oink(). Оба они наследуют функцию speak() от Animal, но их производные методы класса переопределяют методы родительского класса; это переопределяет полиморфизм. Перегрузка Полиморфизма - это использование одной сигнатуры метода, или одного оператора типа "+", для выполнения нескольких различных функций в зависимости от реализации. Оператор "+", например, может использоваться для выполнения целочисленного сложения, сложения с плавающей точкой, конкатенирования списков или конкатенирования строк. Любые два подкласса чисел, такие как Целое и Двойное, должны правильно складываться в ООП-языке. Поэтому язык должен перегружать оператор сложения "+", чтобы работать таким образом. Это помогает улучшить читаемость кода. В разных языках это реализуется по-разному, но большинство ООП-языков поддерживают хотя бы некоторый уровень перегрузки полиморфизма.
Если вы собираетесь следовать приведенным примерам (используя getter/setter или установив его в конструкторе), то измените его на private, так как это способы управления тем, что задано в переменной.
Нет смысла держать свойство публичным со всеми теми вещами, которые добавлены в класс.
Добавить метод getter и setter в свой класс.
public function setValue($new_value)
{
$this->testvar = $new_value;
}
public function getValue()
{
return $this->testvar;
}
Внутри класса Тест-класс
:
public function __construct($new_value)
{
$this->testvar = $new_value;
}