#php
#php
Вопрос:
Я пытаюсь создать класс PHP, и когда я вызываю его функции, я хочу, чтобы они вызывались таким образом.
$result = $instance->init()->selectAll('user')->where('id = 1');
$result->execute();
пример класса:
class user{
public static $name = "test";
public $email;
public $last_name;
public $first_name;
public $changed_name;
public function getName(){
return static::$name;
}
public function init(){
static::$name = "John";
}
}
Теперь я хочу назвать это так:
echo $user->init()->getName();
Я видел это в PDO и в Symfony QueryBuilder. Если есть способ сделать это, пожалуйста, скажите мне. Заранее спасибо.
Комментарии:
Ответ №1:
Чтобы добиться цепочки методов, вы должны вернуть $this вместо возврата static::$name; как в функции getName(). Вам также следует подумать о том, чтобы сделать свойства вашего класса закрытыми или защищенными на случай, если вы используете наследование, чтобы избежать изменений извне
class Sql
{
private string $table='';
private array $select = [];
private string $queryString = '';
public function table(string $table): Sql
{
$this->table = $table;
return $this;
}
public function select(array $select): Sql
{
$this->select = $select;
return $this;
}
public function getQueryString(): string
{
return $this->queryString;
}
public function setQueryString(string $queryString): void
{
$this->queryString = $queryString;
}
private function buildSelect(array $col=[]): void
{
if(count($this->select)==0)
{
$command = "*";
} else {
$command = implode(separator:',',array:$this->select);
}
$command = "SELECT ".$command." FROM ".$this->table;
$this->setQueryString($command);
}
public function get(): string
{
$this->buildSelect();
return $this->getQueryString();
}
}
$sql = new Sql();
$s = $sql->table('users')->select(['name','age'])->get();
echo "<pre>";
print_r($s);
echo "</pre>";
Вы получите вывод в виде: ВЫБЕРИТЕ имя, возраст ИЗ списка пользователей
Комментарии:
1. Спасибо за помощь, у меня были свои подозрения на этот счет. Еще раз спасибо.
2. Я обновляю ответ. Вот пример, который я построил для вас
3. Большое вам спасибо, я ценю ваши усилия.