Установить переменные по умолчанию в классе

0

Я получил здесь этот код:

class Article {
    public $content,$author, $all;

    public function __construct() {
        $this->all = "{$this->author} Wrote: {$this->content}";
    }
}
$newArt = new Article();
$newArt->content = "Lorem ipsum";

Это работает нормально, но мой вопрос: нет ли способа установить эти значения автоматически при установке нового класса? Что-то вроде:

$newArt = new Article("content of content variable", "author");
Теги:
class
object

3 ответа

1
Лучший ответ

Это плохая практика, чтобы публиковать своих участников. Только классные методы (функции) должны быть общедоступными, и даже тогда некоторые из них могут быть защищены и/или закрыты.

По соглашению, установите своих членов класса частными или защищенными, затем обращайтесь к ним через сеттеры и getters и создайте функцию конструктора с вашими необходимыми свойствами для создания экземпляров ваших объектов статьи:

class Article{
   private $content;
   private $author;
   private $all;

   public function __construct($content, $author){
      $this->content = $content;
      $this->author = $author;
      $this->all = "{$this->author} wrote: {$this->content}";
   }

   public function getAll{
      return $this->all;
   }
}

Затем вы можете вызвать этот класс в своем клиентском скрипте:

$article = new Article('Lorem Ipsum', 'William Shakespear');
echo $article->getAll();
3

Да:

public function __construct($content, $author) {
    $this->content = $content;
    $this->author = $author;
    $this->all = "{$this->author} Wrote: {$this->content}";
}

Другие способы в зависимости от цели, но как $this->content и $this->author устанавливаются в вашем существующем коде?

2

небольшая модификация к @AbraCadaver (недостаточно комментариев, чтобы добавить комментарий еще)

public function __construct($content='my default content', $author='my default author') {
    $this->content = $content;
    $this->author = $author;
    $this->all = "{$this->author} Wrote: {$this->content}";
}

Я предлагаю это, потому что похоже, что OP не требует параметров при построении. Таким образом, он может быть создан без каких-либо действий и если ничего не передано, он по умолчанию задает некоторые предопределенные значения.

другой подход:

public function __construct() {
    $this->content = 'my default content';
    $this->author = 'my default author';
    $this->all = "{$this->author} Wrote: {$this->content}";
}

а затем использовать такие функции, чтобы установить значения позже:

public set_author ($author) {
   $this->author = $author;
}

Я предпочитаю хранить переменные в частном порядке, а затем строить набор и самостоятельно публиковать свои функции. Это оставляет место для правил проверки и форматирования, которые будут добавлены позже.

  • 0
    +1 - хорошая идея.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню