Элегантное решение?

Yankovitz

Привет, на ООП нужно реализовать получение данных для ряда заранее не предопределённых таблиц из БД. Таблицы, которые уже есть, это ‘post’ и ‘page’. Есть ли более лучшее решение чем __callStatic?

Пример, что пока есть:

PHP:
  1. class Field {
  2.     public static function __callStatic( string $name, array $args ) {
  3.         // здесь MySQL запрос типа
  4.         return SELECT * FROM {$name}fields WHERE id = $args[‘0’] AND name = $args[‘1’]
  5.     }
  6. }

И получение, данных:

PHP:
  1. echo Field::post( [ 2, ‘meta_field’ ] );

Печаль в том, что в метод __callStatic можно передать только 2 аргумента. И второй только в виде массива.

Есть ли паттерн, который позволил бы реализовать это в виде:

PHP:
  1. echo Field::post( 2, ‘meta_field’ );

Я пробовал так:

PHP:
  1. echo Field::post( 2 )->meta_field;

Но интерпретатор ожидаемо вернул ошибку. Так как передать можно только массив.

 

miketomlin

Оно так и работает ;)

 

mkramer

в __callStatic можно передать сколько угодно аргументов, и они будут в массиве

 

MouseZver

Всё что нужно знать про ООП https://php.ru/forum/threads/staticheskie-metody-i-svojstva-ehto-oop.67320/
— Добавлено —

  • У автора не ООП
  • sql-Injection + буквенные/текстовые/символьные значения уничтожат синтаксис SQL

— Добавлено —

Интерпретатор вернул ошибку об отсутствии ключа 1 в массиве переменной $args

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *