Установка общедоступных переменных класса

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

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

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

$Testclass = new Testclass();
$Testclass->testvar = "another value";    
$Testclass->dosomething();
13
задан giannis christofakis 4 July 2013 в 11:24
поделиться

7 ответов

так, но я бы предложил написать геттер и сеттер для этой переменной.

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();
26
ответ дан 1 December 2019 в 19:31
поделиться

Использовать конструкторы.

<?php
class TestClass
{
    public $testVar = "default value";
    public function __construct($varValue)
    {
       $this->testVar = $varValue;               
    }
}    
$object = new TestClass('another value');
print $object->testVar;
?>
5
ответ дан 1 December 2019 в 19:31
поделиться

Для перегрузки нужен подкласс:

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

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

Этот код будет перекликаться с newVal.

.
0
ответ дан 1 December 2019 в 19:31
поделиться

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

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

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

Полиморфизм позволяет программисту относиться к производным членам класса точно так же, как и к членам родительского класса. Точнее, полиморфизм в объектно-ориентированном программировании - это способность объектов, принадлежащих к разным типам данных, реагировать на вызовы одноименных методов, каждый из которых соответствует соответствующему типу специфического поведения. Один метод или оператор, такой как +, - или *, может быть абстрактно применен в различных ситуациях. Если Собака получает команду speak(), то это может вызвать функцию bark(). Однако, если Свинья получает команду speak(), это может вызвать функцию oink(). Оба они наследуют функцию speak() от Animal, но их производные методы класса переопределяют методы родительского класса; это переопределяет полиморфизм. Перегрузка Полиморфизма - это использование одной сигнатуры метода, или одного оператора типа "+", для выполнения нескольких различных функций в зависимости от реализации. Оператор "+", например, может использоваться для выполнения целочисленного сложения, сложения с плавающей точкой, конкатенирования списков или конкатенирования строк. Любые два подкласса чисел, такие как Целое и Двойное, должны правильно складываться в ООП-языке. Поэтому язык должен перегружать оператор сложения "+", чтобы работать таким образом. Это помогает улучшить читаемость кода. В разных языках это реализуется по-разному, но большинство ООП-языков поддерживают хотя бы некоторый уровень перегрузки полиморфизма.

0
ответ дан 1 December 2019 в 19:31
поделиться

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

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

0
ответ дан 1 December 2019 в 19:31
поделиться

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

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

public function getValue()
{
    return $this->testvar;        
}
0
ответ дан 1 December 2019 в 19:31
поделиться

Внутри класса Тест-класс :

public function __construct($new_value)
{
    $this->testvar = $new_value;
}
0
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: