Я получил здесь этот код:
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");
Это плохая практика, чтобы публиковать своих участников. Только классные методы (функции) должны быть общедоступными, и даже тогда некоторые из них могут быть защищены и/или закрыты.
По соглашению, установите своих членов класса частными или защищенными, затем обращайтесь к ним через сеттеры и 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();
Да:
public function __construct($content, $author) {
$this->content = $content;
$this->author = $author;
$this->all = "{$this->author} Wrote: {$this->content}";
}
Другие способы в зависимости от цели, но как $this->content
и $this->author
устанавливаются в вашем существующем коде?
небольшая модификация к @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;
}
Я предпочитаю хранить переменные в частном порядке, а затем строить набор и самостоятельно публиковать свои функции. Это оставляет место для правил проверки и форматирования, которые будут добавлены позже.