Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: define()
 
 автор: lab   (13.07.2005 в 02:04)   письмо автору
 
 

Я недавно стал читать книжку php, у меня возник вопрос. Для чего нужно объявлять константы? Зачем они нужны я так и не понял. Вот к примеру такой скрипт, что он дает:
<?
define
(CONSTANT1,"the");
define(CONSTANT2,"\x20");
define(CONSTANT3,"define");
echo(
CONSTANT1);
echo(
CONSTANT2);
echo(
CONSTANT3);
?>

Я конечно понимаю что откуда берется, мне просто не понятно где я могу применить константы..

   
 
 автор: cheops   (13.07.2005 в 02:45)   письмо автору
 
   для: lab   (13.07.2005 в 02:04)
 

Пусть в скрипте имеется 20 циклов
<?php
  
for($i 0$i 5$i++)
  {
    echo 
"<a href=index.php?id=".$id[$i].">".$link[$i]."</a>";
  }
?>

и постраничная навигация
<?php
    
// Запрашиваем информацию о количестве всех тем
    
$query "SELECT COUNT(*) FROM themes
              WHERE id_forum = 
$id_forum AND
                    hide != 'hide'"
;
    
$tot mysql_query($query);
    if(!
totputerror("Ошибка при выборке общего числа тем форума");
    
$total mysql_result($tot,0);
    
$number = (int)($total/$pnumber);
    if((float)(
$total/5) - $number != 0$number++;
    echo 
"<tr><td class=bottomtabletema colspan=5><div class=leftblock><p class=texthelp>Сообщения: ";
    
// Проверяем есть ли ссылки слева
    
if($page $page_link 1)
    {
      echo 
"<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=1> <nobr>[1-5]</nobr></a>&nbsp;<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;";
      
// Есть
      
for($i $page $page_link$i<$page$i++)
      {
          echo 
"&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=".$i."> <nobr>[".(($i 1)*1)."-".$i*5."]</nobr></a>&nbsp;";
      }
    }
    else
    {
      
// Нет
      
for($i 1$i<$page$i++)
      {
          echo 
"&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=".$i."> <nobr>[".(($i 1)*1)."-".$i*5."]</nobr></a>&nbsp;";
      }
    }
    
// Проверяем есть ли ссылки справа
    
if($page $page_link $number)
    {
      
// Есть
      
for($i $page$i<=$page $page_link$i++)
      {
        if(
$page == $i)
          echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*1)."-".$i*5."]&nbsp;</nobr> </em>";
        else
          echo 
"&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=".$i."> <nobr>[".(($i 1)*1)."-".$i*5."]</nobr></a>&nbsp;";
      }
      echo 
"<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=$number> <nobr>[".(($number 1)*1)."-$total]</nobr></a>&nbsp;";
    }
    else
    {
      
// Нет
      
for($i $page$i<=$number$i++)
      {
        if(
$number == $i)
        {
          if(
$page == $i)
            echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*1)."-$total]&nbsp;</nobr></em>";
          else
            echo 
"&nbsp;<a title='Открыть последнюю страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=".$i.">[".(($i 1)*1)."-$total]</a>&nbsp;";
        }
        else
        {
          if(
$page == $i)
            echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*1)."-".$i*5."]&nbsp;</nobr> </em>";
          else
            echo 
"&nbsp;<a title='Открыть страницу с темами' class=menuinfo href=index.php?id_forum=".$id_forum."&page=".$i."> <nobr>[".(($i 1)*1)."-".$i*5."]</nobr></a>&nbsp;";
        }
      }
    }
?>

И таких скриптов штук 40... А теперь встаёт задача изменить 5 на 10 - придётся перепахать очень много кода, не говоря о том, что это занимает много времени, это может быстро привести к ошибке. Гораздо удобнее использовать при разработке кода константу равную 5, потом можно будет изменить её в одном месте, кроме того, константе можно дать осмысленное имя MAX_BLOCKS_TO_PAGE и не придётся гадать, что это за цифра 5 - оценка по пятибальной шкале? процент? отступ?

   
 
 автор: cheops   (13.07.2005 в 02:52)   письмо автору
 
   для: lab   (13.07.2005 в 02:04)
 

Кроме того, в файле можно определить константу
<?php
define
(CONSTANT1,1);
?>

а затем при помощи кода
<?php
if (defined('CONSTANT1')) echo "...";
else include 
"index.php";
?>

определять включали мы файл index.php или ещё нет.

   
 
 автор: lab   (13.07.2005 в 03:32)   письмо автору
 
   для: cheops   (13.07.2005 в 02:52)
 

А зачем проверять включали ли мы файл или нет?
И что означают else и if? И почему в конце (defined('CONSTANT1')) стоит еще одна скобочка?

   
 
 автор: RV   (13.07.2005 в 07:21)   письмо автору
 
   для: lab   (13.07.2005 в 03:32)
 

>А зачем проверять включали ли мы файл или нет?
если имеется два скрипта 1.пхп и 2.пхп, скрипт 2.пхп не может запускатся отдельно, а его должен запускать скрипт 1.пхп. То мы в скрипте 1.пхп определяем констатнту:

<?
define
(CONSTANT1 true); 
?>

а в скрипте 2.пхп проверяем была ли задана константа (а она может задатся только в 1.пхп)

<?
if (!defined('CONSTANT1')) die('отказано в доступе'); //прекращаем выполнение скрипта 
основной код скрипта  // а если константа задана то все ок и продолжем выполнение 
?> 

   
 
 автор: Гость   (13.07.2005 в 07:48)   письмо автору
 
   для: RV   (13.07.2005 в 07:21)
 

Хм а зачем обьявлять именно константу? почему не объявить просто переменную?

   
 
 автор: RV   (13.07.2005 в 10:45)   письмо автору
 
   для: Гость   (13.07.2005 в 07:48)
 

можно и переменную

   
 
 автор: cheops   (13.07.2005 в 11:42)   письмо автору
 
   для: Гость   (13.07.2005 в 07:48)
 

Переменную можно случайно исправить, в случае константы - это невозможно.

   
 
 автор: lab   (15.07.2005 в 03:40)   письмо автору
 
   для: RV   (13.07.2005 в 07:21)
 

Я конечно еще не гуру, я просто немного не понимаю. Ведь можно воспользоваться include() ?? Или это опасная функция?

   
 
 автор: Loki   (15.07.2005 в 09:43)   письмо автору
 
   для: lab   (15.07.2005 в 03:40)
 

А одно другого не исключает. Тут речь идет о том, что в целях защиты один скрипт не должен запускаться без другого. Например, скрипт авторизации вставляется в каждую страницу, но сам по себе (без страницы) они исполняться не должен. Поэтому, в его начале мы ставим проверку определена ли константа (а определить ее можно только из другого скрипта) и, если не определена, то скрипт прекращает работу.
А если использовать переменную, то ее в скрипт можно передать извне.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования