За последние 24 часа нас посетили 18784 программиста и 1710 роботов. Сейчас ищут 959 программистов ...

Fatal error: Non-static method

Тема в разделе "PHP для новичков", создана пользователем energy2008, 26 июн 2008.

  1. energy2008

    energy2008 Активный пользователь

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    Поставил PHP5, появилась новая ошибка при обращении к фунции pages из одноименного класса:
    Fatal error: Non-static method Pages::pages() cannot be called statically in X:\home\cms2\www\admin.php on line 786

    Впервый сталкиваюсь с такой ошибкой. В чем может быть проблема?
    Функция выводит иерархию страниц у сайта и имеет следущий вид:
    $fa - ID старшей страницы
    $n - ID текушей страницы

    PHP:
    1.  Class Pages
    2.  {
    3.  function pages($fa,$n,$opt)  // вывод существующих страниц для редактирования
    4.           {
    5.           $mvr = mysql_query("select * from 0pages where FATHER = $fa");
    6.           $t = mysql_num_rows($mvr);
    7.           if ($t>0)
    8.               {
    9.               $px = 20 * $n;  $px_menu = 12 * $n -5;          $n++;
    10.               for ($i=0; $i<$t; $i++)
    11.                    {
    12.                    $f = mysql_fetch_array($mvr);
    13.                    $URL = "/".($f['URL1']!=""?$f['URL1']."/":"");
    14.                    if ($f['VISIBLE']==1)
    15.                        {
    16.                        $css= "visible";
    17.                        }
    18.                    else
    19.                        {
    20.                        $css= "invisible";
    21.                        }
    22.                    if ((@$_GET['edit']==$f['ID'])||(@$_GET['add']==$f['ID']))
    23.                        {
    24.                        $cs= "_red";
    25.                        }
    26.                    else
    27.                        {
    28.                        $cs= "";
    29.                        }
    30.                    if($opt!="menu")
    31.                        {
    32.                        echo "<tr class='".$css." plain".$cs."' onMouseOver= \"this.className= '".$css." rollover".$cs."'; \" onMouseOut= \"this.className= '".$css." plain".$cs."'; \"  >";
    33.                        echo "<td width=30% nowrap valign=center style=padding-left:".$px."px;padding-right:20px;><a href=?add=".$f['ID']."><img src=/images/add.gif border=0 height=10 alt='добавить страницу'></a> ".$f['ID']." &nbsp; ";
    34.                        echo "<a href=?edit=".$f['ID']."><b>".$f['TITLE']."</b></a></td> ";
    35.                        echo "<td width=* nowrap><a href=".$URL.">".$URL."</a></td>";
    36.                        echo "<td width=30><a href=?edit=".$f['ID'].">edit</a></td>";
    37.                        echo "<td width=50 class=red><a href=?delete=".$f['ID']."><font color=#FF3300><b>delete</b></font></a></td></tr>";
    38.                        }
    39.                   if($opt=="menu")
    40.                        {     //  <start> обрезание длинных названий в меню
    41.                        $count_url = count(explode("/", ($f['URL1']!=""?$f['URL1']."/":"")));
    42.                        $line = (34 - 2 * $count_url);
    43.                        $f['TITLE'] =    (substr($f['TITLE'],0,$line)!=$f['TITLE']?substr($f['TITLE'],0,$line)."..":$f['TITLE'])  ;
    44.                              //  <end> обрезание длинных названий в меню
    45.                        echo "<div class='".$css." plain2".$cs."' onMouseOver= \"this.className= '".$css." rollover2".$cs."'; \" onMouseOut= \"this.className= '".$css." plain2".$cs."'; \" ";
    46.                        echo "nowrap valign=center style=padding-left:".$px_menu."px;padding-right:5px;><a href=?add=".$f['ID']."><img src=/images/add_small.gif border=0 alt='добавить страницу' ></a> ".$f['ID']." &nbsp; ";
    47.                        echo "<a href=?edit=".$f['ID'].">".$f['TITLE']."</a></div> ";
    48.                        }
    49.                        Pages :: pages($f['ID'],$n,$opt);
    50.                    }
    51.               }
    52.           }
    53. }
    [/code]
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. public static function pages(...
     
  3. mclaud

    mclaud Активный пользователь

    С нами с:
    15 фев 2007
    Сообщения:
    97
    Симпатии:
    0
    Адрес:
    Одесса
    Ты наверное пытаешься его вызвать, вот так:
    PHP:
    1. <?php
    2. Pages::pages($fa,$n,$opt);
    3. ?>
    Вместо, вот так:
    PHP:
    1. <?php
    2. $pages = new Pages;
    3. $pages->pages($fa,$n,$opt);
    4. ?>
    Так что бы можно было так обращаться к методу класса, как в первом варианте, его нужно соответственно объявлять:
    PHP:
    1. <?php
    2. public static function pages($fa,$n,$opt) {
    3.     ...
    4. }
    5. ?>
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    energy2008, к вышесказаному добавлю: и поставь нормальную версию - PHP 5.2.*.
     
  5. energy2008

    energy2008 Активный пользователь

    С нами с:
    24 июн 2008
    Сообщения:
    47
    Симпатии:
    0
    у меня PHP 5.2.4 :)
    спасибо, такой вариант помог.
    PHP:
    1.  <?php
    2.  $pages = new Pages;
    3.  $pages->pages($fa,$n,$opt);
    4.  ?>