PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 8
Вадим Васильев Отправлено: 10 Апреля, 2017 - 16:56:16 • Тема: Подмена одного значения другим • Форум: Напишите за меня, пожалуйста

Ответов: 2
Просмотров: 44
Если только у одного пользователя должно сработать, тогда нужно в таблице sert добавить столбец used стандартно с 0.

Когда кто то введет промокод, тогда идет проверка, если 0 тогда добавить пользователю 200 единиц, а если нет, тогда сообщить об ошибке.
Вадим Васильев Отправлено: 10 Апреля, 2017 - 16:50:49 • Тема: Проблема со статичными методами/свойствами класс. • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 1680
Строитель, Фишка в том что это статичный псевдоконструктор Голливудская улыбка
Вадим Васильев Отправлено: 10 Апреля, 2017 - 12:48:19 • Тема: Проблема со статичными методами/свойствами класс. • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 1680
Строитель, спасибо) Это гениально!) Просто и гениально, я даже не подумал что достаточно создать статичный метод конструктора) Не могу сказать "спасибо", недостаточно комментариев
(Добавление)
Пораскинув мозгами пришел к выводу переделать слегка функционал. Теперь свойство $variables используется а-ля кэш. Вместо него есть метод variablesInit($key) который через свитч либо ищет в $variables данные либо генерит их, сохраняет в $variales и возвращает.
Вадим Васильев Отправлено: 10 Апреля, 2017 - 12:39:00 • Тема: Разница между $func() и call_user_func() • Форум: Вопросы новичков

Ответов: 3
Просмотров: 294
OrmaJever, просто я хотел узнать, это два разных способа или просто два вида вызова одного и того же функционала. Если два разных то в чем разница.
Знаю что есть функция call_user_func_array, но в ней очевидна разница, а тут нет.
Вадим Васильев Отправлено: 07 Апреля, 2017 - 14:20:26 • Тема: Разница между $func() и call_user_func() • Форум: Вопросы новичков

Ответов: 3
Просмотров: 294
Доброго времени суток.
В общем. Если опустить подробности, то есть строка, в которую приходит имя функции. Раньше вопрос решался через case, но решили упростить, и теперь встал вопрос выбора метода решения.
1 способ:
Этот чудо метод меня очень сильно удивил. Он выглядит крайне симпатично, но что-то вызывает сомнения.
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = true;
  3. $func = 'function_name';
  4. $func($a);
  5.  

2 способ:
Он был проще для понимания, но выглядит уже не так изящно.


На самом деле, с коллегами сошлись на мнении, что скорее всего они взывают к одной и той же функциональности, лишь вызов разный. Но интересно мнение Вас, форумчане Радость
Вадим Васильев Отправлено: 07 Апреля, 2017 - 14:03:57 • Тема: Проблема со статичными методами/свойствами класс. • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 1680
Строитель пишет:
Вадим Васильев, точно - это я не учёл. Тогда почему именно статические свойства и методы? Напишите обычный класс. В чем проблема? Вы не хотите создавать экземпляр класса вне класса?


Не то что бы не хочу Закатив глазки.. Просто, думал, вдруг, есть статичный способ Закатив глазки
Скорее для общего развития, нежели из-за какого-то принципа.
Вадим Васильев Отправлено: 07 Апреля, 2017 - 12:42:30 • Тема: Проблема со статичными методами/свойствами класс. • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 1680
quad пишет:
'header' => self::renderPage('header') зачем файл в массив суешь?


В массив идет строка а не файл. Метод renderPage возвращает строку с html
(Добавление)
Строитель пишет:
Вадим Васильев попробуйте так
Спойлер (Отобразить)

(Добавление)
Вадим Васильев, и ещё - у вас в методе renderPage() есть пара exit'ов - вместо них пропишите пару return'ов.



Та же ошибка
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Fatal error: Uncaught Error: Access to undeclared static property: Render::$variables
  3.  

Ведь если я вызываю свойства/методы статчно то __construct не запускается..
Вадим Васильев Отправлено: 06 Апреля, 2017 - 17:23:35 • Тема: Проблема со статичными методами/свойствами класс. • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 1680
Доброго времени суток.
В общем есть код-шаблонизатора, написан в процедурном стиле. Хочу переписать его на ООП, но возникает множество вопросов, а точнее проблем. (весь код представленный ниже лишь легкий аналог, тк оригинал большой)

В процедурке код выглядит следующим образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. $left_menu = [
  3.         ['title' => 'Запись', 'link' => 'order.php'],
  4.         ['title' => 'Избранное', 'link' => 'favorites.php'],
  5.         ['title' => 'Заявки', 'link' => 'orders.php']
  6. ];
  7. $variables = [
  8.         'index' => [
  9.                 'header' => renderPage('header'),
  10.                 'company_name' => 'Компания',
  11.                 'left_menu' => menuGenerator($left_menu),
  12.         ],
  13. ];
  14. function renderPage ($page,$variables = [])
  15. {
  16.         $file = TPL_DIR . $page . '.tpl';
  17.         $templateContent = '';
  18.         if(!is_file($file)){
  19.                 echo 'Шаблон ' . $file . ' не найден';
  20.                 exit;
  21.         }
  22.         if(filesize($file) === 0){
  23.                 echo 'Шаблон ' . $file . ' пустой';
  24.                 exit;
  25.         }
  26.         $templateContent = file_get_contents($file);
  27.         $tempVariables = [];
  28.         if(!empty($GLOBALS['variables'][$page])){
  29.                 $tempVariables = $GLOBALS['variables'][$page];
  30.         }
  31.         if(!empty($variables)) {
  32.                 foreach ($variables as $key => $value) {
  33.                         $tempVariables[$key] = $value;
  34.                 }
  35.         }
  36.         $variables = $tempVariables;
  37.         if(!empty($variables)){
  38.                 foreach ($variables as $key => $value) {
  39.                         if($value !== null && !is_array($value)){
  40.                                 $key = '{{' . strtoupper($key) . '}}';
  41.                                 $templateContent = str_replace($key, $value, $templateContent);
  42.                         }
  43.                 }
  44.         }
  45.         return $templateContent;
  46. }
  47. function menuGenerator($items)
  48. {
  49.         $result = '<ul class="nav navbar-nav">';
  50.         foreach ($items as $item) {
  51.                 $result .= '<li>';
  52.                 $result .= '<a href="' . $item['link'] . '">' . $item['title'] . '</a>';
  53.                 $result .= '</li>';
  54.         }
  55.         $result .= '</ul>';
  56.         return $result;
  57.  
  58.  


Пытаюсь перевести все в ООП. Создаю статичные свойства, которые через self:: вызывают статичный метод, статичный метод в свою очередь вызывает статичное свойство (только сейчас подумал что какая то путоница, но в процедурке работает как часы)
PHP:
скопировать код в буфер обмена
  1.  
  2. class Render
  3. {
  4.     public static $left_menu = [
  5.                 ['title' => 'Запись', 'link' => 'order.php'],
  6.                 ['title' => 'Избранное', 'link' => 'favorites.php'],
  7.                 ['title' => 'Заявки', 'link' => 'orders.php']
  8.         ];
  9.     public static $variables = [
  10.                 'index' => [
  11.                         'header' => self::renderPage('header'),
  12.                         'company_name' => 'Компания',
  13.                         'left_menu' => self::menuGenerator($left_menu),
  14.                 ],
  15.         ];
  16.         public static function renderPage ($page,$variables = [])
  17.         {
  18.                 $file = TPL_DIR . $page . '.tpl';
  19.                 $templateContent = '';
  20.                 if(!is_file($file)){
  21.                         echo 'Шаблон ' . $file . ' не найден';
  22.                         exit;
  23.                 }
  24.                 if(filesize($file) === 0){
  25.                         echo 'Шаблон ' . $file . ' пустой';
  26.                         exit;
  27.                 }
  28.                 $templateContent = file_get_contents($file);
  29.                 $tempVariables = [];
  30.                 if(!empty(self::$variables[$page])){
  31.                         $tempVariables = self::$variables[$page];
  32.                 }
  33.                 if(!empty($variables)) {
  34.                         foreach ($variables as $key => $value) {
  35.                                 $tempVariables[$key] = $value;
  36.                         }
  37.                 }
  38.                 $variables = $tempVariables;
  39.                 if(!empty($variables)){
  40.                         foreach ($variables as $key => $value) {
  41.                                 if($value !== null && !is_array($value)){
  42.                                         $key = '{{' . strtoupper($key) . '}}';
  43.                                         $templateContent = str_replace($key, $value, $templateContent);
  44.                                 }
  45.                         }
  46.                 }
  47.                 return $templateContent;
  48.         }
  49.         public static function menuGenerator($items)
  50.         {
  51.                 $result = '<ul class="nav navbar-nav">';
  52.                 foreach ($items as $item) {
  53.                         $result .= '<li>';
  54.                         $result .= '<a href="' . $item['link'] . '">' . $item['title'] . '</a>';
  55.                         $result .= '</li>';
  56.                 }
  57.                 $result .= '</ul>';
  58.                 return $result;
  59.         }
  60.         }
  61.  
  62. ?>
  63.  


В таком раскладе пыпыха ругается
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Fatal error: Constant expression contains invalid operations
  3.  

ссылаясь на строку, закрывающую массив $variables

Я предположил что можно попробовать задать свойства через
PHP:
скопировать код в буфер обмена
  1.  
  2. public function __construct() {
  3.         $this->variables...
  4. }
  5.  

И в методе

И получил плюху в лоб, которая в принципе логична, тк я объект не создаю.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Fatal error: Uncaught Error: Using $this when not in object context in
  3.  


В общем наставьте меня на путь истинный. Сильно туплю, но хочу все понять.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB