Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Два вопросы по php и mySQL

 PHP.SU

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


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

> Без описания
winddancer
Отправлено: 10 Декабря, 2015 - 15:11:41
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Добрый день уважаемые форумчане. Благодарю за все ответы, которые Вы дадите.

Итак проблема.
В файле config.php у меня есть такое:
PHP:
скопировать код в буфер обмена
  1. $config['db_name']                      = 'name';
  2. $prefix_settings = $config['db_name'] . '_settings';


Я подключаю файл config к файлу functions

В файле функции допустим есть:

PHP:
скопировать код в буфер обмена
  1. function a(){
  2.         echo $prefix_menu_site;
  3. }


Проблема в том, что функция не видит переменную с конфига "$prefix_menu_site".
Как мне затолкать ее туда кроме как в каждую функцию подключать конфиг отдельно?
 
 Top
OrmaJever Модератор
Отправлено: 10 Декабря, 2015 - 15:23:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




и не увидит, потому что у переменных есть такое понятие как область видимости. Для общедоступных значений лучше использовать константы


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
popover
Отправлено: 10 Декабря, 2015 - 15:24:07
Post Id



Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Дек. 2015  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1. function a($prefix_menu_site)
  2. {
  3.     echo $prefix_menu_site;
  4. }
  5.  
  6. // or
  7.  
  8. function a()
  9. {
  10.     global $prefix_menu_site;
  11.     echo $prefix_menu_site;
  12. }


Но ни один ни другой варианты не юзабельны.
 
 Top
winddancer
Отправлено: 10 Декабря, 2015 - 15:26:08
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




OrmaJever пишет:
и не увидит, потому что у переменных есть такое понятие как область видимости. Для общедоступных значений лучше использовать константы

Читал про область видимости, но так и не понял.
Почему вне функции переменная видна, но в функции не видно.... вот в чем вопрос.
(Добавление)
popover пишет:
PHP:
скопировать код в буфер обмена
  1. function a($prefix_menu_site)
  2. {
  3.     echo $prefix_menu_site;
  4. }
  5.  
  6. // or
  7.  
  8. function a()
  9. {
  10.     global $prefix_menu_site;
  11.     echo $prefix_menu_site;
  12. }


Но ни один ни другой варианты не юзабельны.

А более юзабельный способ? Можно навести пример?
 
 Top
popover
Отправлено: 10 Декабря, 2015 - 15:50:44
Post Id



Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Дек. 2015  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1. class Conf
  2. {
  3.     /**
  4.      * @var Conf|null
  5.      */
  6.     private static $instance;
  7.     /**
  8.      * @var string
  9.      */
  10.     private $file = 'a.ini';
  11.     /**
  12.      * @var array
  13.      */
  14.     private $data = array ();
  15.  
  16.     /**
  17.      * Conf constructor.
  18.      */
  19.     private function __construct()
  20.     {
  21.         if (file_exists($this->file))
  22.         {
  23.             $this->data = parse_ini_file($this->file);
  24.         }
  25.         else
  26.         {
  27.             throw new \Exception(sprintf('file settings %s not found', $this->file));
  28.         }
  29.     }
  30.  
  31.     /**
  32.      * @return array
  33.      */
  34.     public static function get()
  35.     {
  36.         if (!self::$instance)
  37.         {
  38.             self::$instance = new self();
  39.         }
  40.  
  41.         return self::$instance->data;
  42.     }
  43. }
  44.  
  45. var_dump(Conf::get());
  46.  
  47. //or
  48.  
  49. define('path', 'test');
  50. define('text', 'Hello, user');
 
 Top
esterio
Отправлено: 10 Декабря, 2015 - 16:21:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




popover
Вроде ТС не это нужно, а узнать про область видимости переменных. Также не уверен что он поймет что такое private в ООП и что такое конструктор и тем боле singleton (как по мне рано еще). Кстати ТС ничего не говорил про INI файлы. Ну а если уж совсем говорить про юзабельный вариант, то Ваш не самый то и лучшый. Посмотрите как сделано в том же Yii2 или Simfony2.

П.С. а если еще поспорить про крутость ini-файлов, то они хуже всех. Yaml, JSON, PHP Arrays куда более flexible.
(Добавление)
winddancer
ВОт простой пример области видимости (которая кстати не такакя как в большинстве языков)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $foo = 'bar';
  3.  
  4. function baz() {
  5.         var_dump($foo); // Виведет null
  6. }
  7.  
  8. function baz2() {
  9.         $foo = 'bar';  
  10.         var_dump($foo); // Виведет baz
  11. }
  12.  
  13. baz();
  14. baz2();
  15. var_dump($foo); // Виведет baz

(Отредактировано автором: 10 Декабря, 2015 - 16:21:43)

 
 Top
popover
Отправлено: 10 Декабря, 2015 - 16:38:20
Post Id



Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Дек. 2015  


Помог: 2 раз(а)




esterio пишет:
а если еще поспорить про крутость ini-файлов, то они хуже всех. Yaml, JSON, PHP Arrays куда более flexible.

Я привёл ini лишь из-за того, что он единственный простой. ТС на 99% не слышал про yaml json и так далее. Тем более, идите, напишите мне вручную конф json.

Если говорить о примере с синглтоном и инкапсуляцией в свете "слишком сложно", но при этом говорить "идите посмотрите, как это работает в симфони или юи", то не понимаю Вашей логики.

А симфони весь завязан на di, к чему это ТС? Если он вынесет из примера что-то, то хорошо. И к слову, я привёл четыре примера, а Вы только лясы точите.
(Добавление)
esterio пишет:
ВОт простой пример области видимости (которая кстати не такакя как в большинстве языков)

Это гениально, если учесть, что автор понимает, что внутри функции переменная не видна, но не понимает почему.
 
 Top
winddancer
Отправлено: 10 Декабря, 2015 - 16:59:56
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Спасибо всем ответившим.
Так как тема предусматривает вопрос и по мусклу, задам его здесь.
Хочу на своем сайтике сделать систему блога с блоком "Читайте также".

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $connect_site = mysql_query ("SELECT * FROM `table` ORDER BY RAND() LIMIT 1"); //
  3. $connect_site1 = mysql_query ("SELECT * FROM `table` ORDER BY RAND() LIMIT 1");
  4. $datas = array();
  5. while($content1 = mysql_fetch_array($connect_site))
  6. $datas[] = $content1;
  7. while($content2 = mysql_fetch_array($connect_site1))
  8. $datas1[] = $content2;
  9. ?>
  10. <table width = 100% height = "300px">
  11. <tr>
  12.         <td width = 50%>
  13.         <? foreach ($datas as $data):
  14.         echo "<a href = \"" . $data['url']. "\">" . $data['title'] . "</a><br>";
  15.         echo substr($data['text'],0,100);
  16.         endforeach; ?>
  17.         </td width = 50%>
  18.         <td>
  19.         <? foreach ($datas1 as $data1):
  20. echo "<a href = \"" . $data1['url']. "\">" . $data1['title'] . "</a><br>";
  21. echo substr($data1['text'],0,100);
  22. endforeach; ?>
  23.         </td>
  24. </tr>


С одной стороны вопрос следующий. Как упростить можно код?
С другой - как сделать так, чтобы рандом не показывал ту же статью, которые отображаются?(т.е. с условием if) пытался с идом покрутить, но вместо того, чтобы работать, оно прекращало работу в одном выводе, где было задано условие.


Отредактировано модератором: Мелкий, 10 Декабря, 2015 - 17:04:31
подсветку кода подправил
 
 Top
OrmaJever Модератор
Отправлено: 10 Декабря, 2015 - 18:46:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




winddancer ваш код не правильный и более чем полностью но попробую всё же дать почву для размышлений

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $connect_site = mysql_query ("SELECT * FROM `table` ORDER BY RAND() LIMIT 1"); //
  3. $connect_site1 = mysql_query ("SELECT * FROM `table` ORDER BY RAND() LIMIT 1");
  4. ?>
  5. <table width = 100% height = "300px">
  6. <tr>
  7.         <td width = 50%>
  8.       <? while($data = mysql_fetch_array($connect_site)) : ?>
  9.         <a href = "<?=$data['url']?>"><?=$data['title']?></a><br>
  10.         <?=substr($data['text'],0,100)?>
  11.       <? endwhile; ?>
  12.         </td width = 50%>
  13.         <td>
  14.       <? while($data1 = mysql_fetch_array($connect_site1)) : ?>
  15.         <a href = "<?=$data1['url']?>"><?=$data1['title']?></a><br>
  16.         <?=substr($data1['text'],0,100)?>
  17.       <? endwhile; ?>
  18.         </td>
  19. </tr>
  20.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB