За последние 24 часа нас посетил 62801 программист и 1678 роботов. Сейчас ищут 970 программистов ...

Не работает new $className()

Тема в разделе "Прочие вопросы по PHP", создана пользователем alexey_baranov, 24 дек 2010.

  1. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    Привет!

    Вот кусочек кода, который почему-то на винде раотает, а на юниксах нет. Не знаете в чем дело?
    PHP:
    1. <?php
    2. $viewClassName= '\tv\View\PageInfoView';
    3. $vew= new $viewClassName($currentChild, $this, "cc");
    На автолоаде затыкается. Кричит "рекваер онсе не может найти файла tv/View/PageInfoView.php" а хотя такой файл есть. И на винде все работает.

    Спасибо!
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    мб. потому что на винде и на линухе в указании пути к файлу используют разные слеши :)
     
  3. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    tv/View/PageInfoView.php - это по-моему нормальный никсовый путь. наверное что-то другое[/b]
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    * регистр - винде оно пох*ю
    * права

    в любом случае заголовок темы не отражает суть проблемы. проблема в доступе к файлу, а не в каких-то тонкостях синтаксиса
     
  5. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    artoodetoo
    Я пока хак туда вставил. С хаком работает. Так что и не в правах и не в регистре. А че еще может быть я и сам не знаю. Рекваер ванс говорит "нет такого файла tv\View\PageInfoView.php в инклудах таких-то" а я глазами вижу что есть такой файл именно в в той папке, которая указана в инклудепас. Баг что-ли?

    PHP:
    1. <?php
    2. $temp= new \tv\View\PageInfoView();  //это хак! Этот класс я заранее не мог знать.
    3.  
    4. $viewClassName= '\tv\View\PageInfoView';
    5. $vew= new $viewClassName($currentChild, $this, "cc");
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ок. в твоем автолоадере используется относительный или абсолютный путь до файла?
    поймай через die($filename) оба случая - с явным указанием класса и с подставляемым

    а может у тебя где-то "\t..." есть )))) насчет спецсимволов точно всё ОК?
     
  7. alexey_baranov

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

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    Мой автолоад- это доктрин2 автолоад. Он сейчас настроен так, что ищет путь к файлу tv/View/PageInfoView.php внутри инклудепас. Инклуде пас настроен правильно. Это точно, потому что и другие классы подгружаются и в рекваер ванс фатал эрор я вижу нужную папку.

    А что такое die($filename) ? куда это надо вставить, в автолоад?

    Про спец-символы все ок. Потому что на самом деле строка с классом не рукописная, а получается из get_class () для модели.
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    alexey_baranov
    дык а как помочь тебе если я например не знаю что там доктрина делает и что ей надо...?
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    str_replace('\\', '/', $className)

    Вполне может быть из-за трактовки комбинации \t съезжать. Знаю, в одиночных кавычках не должно, но баги никто не отменял.
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    не надо быть таким категоричным. ошибка есть, это повод подвергнуть сомнению всё

    перед тем как что-то куда-то передастся, оно у тебя присваивается как строковая константа и в этот момент [падападападам!!!] ВНЕЗАПНО может случиться "\t"

    die($var) - универсальное лекарство. помогает всегда. если оно не выявило ошибку, значит вставлено не туда.