Настройка переменных открытого класса

Как установить общедоступную переменную. Это правильно?:

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

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

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

Ответ 1

вот так, но я бы предложил написать 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();

Ответ 2

class Testclass
{
  public $testvar;

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

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

Ответ 3

Используйте конструкторы.

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

Ответ 4

Внутри class Testclass:

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

Ответ 5

Вы "устанавливаете" значение этой переменной/атрибута. Не перегружать или перегружать его. Ваш код очень, очень распространенный и нормальный.

Все эти термины ( "set", "override", "overload" ) имеют определенные значения. Переопределение и перегрузка относятся к полиморфизму (подклассу).

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

Полиморфизм позволяет программисту относиться к членам производного класса так же, как к членам их родительского класса. Точнее, полиморфизм в объектно-ориентированном программировании - это способность объектов, принадлежащих к разным типам данных, реагировать на вызовы методов методов с одним и тем же именем, каждый из которых соответствует соответствующему типу поведения. Один метод, или оператор, такой как +, - или *, может быть абстрактно применен во многих разных ситуациях. Если собаке приказано говорить(), это может вызвать кору(). Однако, если команде Pig приказано говорить(), это может вызвать oink(). Они оба наследуют слова() от Animal, но методы их производного класса переопределяют методы родительского класса; это переопределяющий полиморфизм. Перегрузка Полиморфизм - это использование одной сигнатуры метода или одного оператора, такого как "+" , для выполнения нескольких различных функций в зависимости от реализации. Например, оператор "+" может использоваться для выполнения целочисленного добавления, добавления с плавающей запятой, конкатенации списков или конкатенации строк. Ожидается, что любые два подкласса Number, такие как Integer и Double, будут правильно объединены на языке OOP. Поэтому язык должен перегружать оператор сложения "+" , чтобы работать таким образом. Это помогает улучшить читаемость кода. Как это реализовано, варьируется от языка к языку, но большинство языков ООП поддерживают по крайней мере некоторый уровень перегрузочного полиморфизма.

Ответ 6

Для перегрузки вам потребуется подкласс:

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

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

Этот код будет эхом newVal.

Ответ 7

Добавить метод getter и setter в ваш класс.

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

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

Ответ 8

Если вы собираетесь следовать приведенным примерам (используя getter/setter или его настройку в конструкторе), измените его на private, поскольку это способы управления тем, что установлено в переменной.

Не имеет смысла держать свойство общедоступным со всеми этими вещами, добавленными в класс.