За последние 24 часа нас посетили 39244 программиста и 1722 робота. Сейчас ищут 590 программистов ...

Объект в строку - PHP ООП

Тема в разделе "PHP для новичков", создана пользователем Elect, 4 авг 2015.

  1. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    Всем привет.Появилась ошибка:
    Catchable fatal error: Object of class index could not be converted to string in D:\home\t.ru\www\index.php on line 76
    index.php
    Код (PHP):
    1. <?php
    2.  
    3. header('Content-Type: text/html; charset=utf-8');
    4.  
    5. $dir_name = str_replace('\\','/', dirname(__FILE__));
    6. define('ROOT', $dir_name);
    7.  
    8. require_once '/engine/config.php';
    9. require_once ROOT.'/engine/classes/core.class.php';
    10.  
    11.  
    12. if (defined('MODE'))
    13. {
    14.     switch (MODE)
    15.     {
    16.         case 'development':
    17.             error_reporting(E_ALL);
    18.             $time = microtime();
    19.         break;
    20.  
    21.         case 'testing':
    22.         case 'production':
    23.             error_reporting(0);
    24.         break;
    25.  
    26.         default:
    27.             exit('The application environment is not set correctly.');
    28.     }
    29. }
    30.  
    31.  
    32. try{
    33.     if(isset($_GET['admin'])){
    34.         require_once ROOT.'/engine/classes/admin/core.class.php';
    35.         //if(isset($_SESSION['login'])){
    36.             $get = $_GET['admin'];
    37.             $acp = ROOT.'/engine/classes/admin/'.$get.'.class.php';
    38.             if(file_exists($acp)){
    39.                 require_once $acp;
    40.                 $view = new $get;
    41.                 $view = $view->getBodyA();
    42.                 echo $view;
    43.             }else{
    44.                 $_GET['admin'] = "index";
    45.             }
    46.         //}else{
    47.             
    48.         //}
    49.         
    50.     }elseif(isset($_GET['option'])){
    51.         $get = $_GET['option'];
    52.         $path = $classes_path.$get.'.class.php';
    53.         if(file_exists($path)){
    54.             require_once $path;
    55.             if(class_exists($get)){
    56.                 $view = new $get;
    57.                 $view = $view->getBody();
    58.                 echo $view;
    59.                 
    60.             }else{
    61.                 $_GET['option'] = "index";
    62.             }
    63.         }else{
    64.             $option = "index";
    65.         }
    66.     }elseif(isset($_GET['page'])){
    67.         $get = $_GET['page'];
    68.         $spage = $mysqli->query("SELECT title,value,name FROM pages WHERE name = '$get'");
    69.         require_once ROOT.'/engine/classes/admin/core.class.php';
    70.         require_once ROOT.'/engine/classes/pages/index.class.php';
    71.         $rows = $spage->fetch_assoc();
    72.         if($spage->num_rows > 0){
    73.             $view = new index;
    74.             $view->getBodyP();
    75.             echo $view;
    76.         }else{
    77.             echo "no!";
    78.         }
    79.     }else{
    80.         $path = $classes_path.'index.class.php';
    81.         require_once $path;
    82.         $view = new index;
    83.         $view = $view->getBody();
    84.         echo $view;
    85.     }
    86.     
    87.     
    88.     
    89.     
    90.     
    91. }catch(Exception $e){
    92.     echo $e->getMessage();
    93. }
    94. $time2 = microtime();
    95. list($sm, $ss) = explode(' ', $time);
    96.   list($em, $es) = explode(' ', $time2);
    97.  
    98.   echo number_format(($em + $es) - ($sm + $ss), 3);
    99. ?>
    getBodyP()
    Код (PHP):
    1. public function getBodyP() {
    2.             $tmp_url = ROOT.'/engine/templates/'.TMP_NAME.'/main.tpl';
    3.             if(file_exists($tmp_url)){
    4.                 $tmp = file_get_contents($tmp_url);
    5.                 $tmp = $this ->ReplaceString($tmp);
    6.                 $tmp = $this ->ReplaceString($tmp);
    7.                 $tmp = $this ->ReplaceStringTitle($tmp);
    8.                 $tmp = $this ->ReplaceStringSN($tmp);
    9.                 $tmp = $this ->ReplaceStringContent($tmp);
    10.                 $tmp = $this ->ReplaceStringRoot($tmp);
    11.                 $tmp = $this ->ReplaceStringlogged($tmp);
    12.                 $tmp = $this ->ReplaceStringLogin($tmp);
    13.                 $tmp = $this->ReplaceStringMenu($tmp);
    14.                 return $tmp;
    15.                 
    16.                 //file_put_contents($save, $tmp);
    17.                 //require_once $save;
    18.                 
    19.                 //unlink($save);
    20.                 
    21.             }else{
    22.                 throw new Exception("Шаблон не найден или не существует");
    23.             } 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Исправьте. Либо в этом месте не должно быть объекта, либо его класс должен содержать метод __toString, который должен возвращать строковое представление объекта
     
  3. Elect

    Elect Новичок

    С нами с:
    4 авг 2015
    Сообщения:
    70
    Симпатии:
    0
    А как сделать что бы небыло объекта?
    Я похоже что то сделал не так с методом __toString
    index.php
    Код (PHP):
    1. $view = new index;
    2.             $view->getBodyP();
    3.             $view->__toString($view);
    4.             echo $view; 
    core
    Код (PHP):
    1. public function getBodyP() {
    2.             $tmp_url = ROOT.'/engine/templates/'.TMP_NAME.'/main.tpl';
    3.             if(file_exists($tmp_url)){
    4.                 $tmp = file_get_contents($tmp_url);
    5.                 $tmp = $this ->ReplaceString($tmp);
    6.                 $tmp = $this ->ReplaceString($tmp);
    7.                 $tmp = $this ->ReplaceStringTitle($tmp);
    8.                 $tmp = $this ->ReplaceStringSN($tmp);
    9.                 $tmp = $this ->ReplaceStringContent($tmp);
    10.                 $tmp = $this ->ReplaceStringRoot($tmp);
    11.                 $tmp = $this ->ReplaceStringlogged($tmp);
    12.                 $tmp = $this ->ReplaceStringLogin($tmp);
    13.                 $tmp = $this ->ReplaceStringMenu($tmp);
    14.                 return $tmp;
    15.                 
    16.                 //file_put_contents($save, $tmp);
    17.                 //require_once $save;
    18.                 
    19.                 //unlink($save);
    20.                 
    21.             }else{
    22.                 throw new Exception("Шаблон не найден или не существует");
    23.             }
    24.         }
    25.         public function __toString($data)
    26.         {
    27.             return $this->$data;
    28.         } 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ага. Ссылочку почитайте. А вообще, если вы такую фигню пишите, и не понимаете, где ошиблись, то вам рано ООП. Почитайте про функции, что-ли...
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да, что-то пошло не так. Автор, кури:

    Мало просто написать __toString, нужно еще самому реализацию написать, да. Это если при присвоении строковой переменной ожидается какое-то конкретное значение из объекта. Если же целиком объект в строку упаковать надо, то вам нужен serialize. В коде вашем копаться лень, в трех словах опишите, что там происходить должно по-вашему?
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Elect, вообще зачем это делается? в каких целях?
     
  7. ol.vo

    ol.vo Активный пользователь

    С нами с:
    5 авг 2015
    Сообщения:
    47
    Симпатии:
    0
    И к тому же, в этой строке ошибка:
    Код (PHP):
    1. return $this->$data; 
    При обращении к свойствам объекта знак $ является ошибкой.
    (не путать с обращением к статическим свойствам и константам классов)

    Так же хочу добавить, что в методе __toString нельзя выбрасывать исключения, ошибки становятся фатальными.