За последние 24 часа нас посетили 17866 программистов и 1652 робота. Сейчас ищут 914 программистов ...

Две собаки

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

  1. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Код (Text):
    1. self::$ROOT = str_replace(self::$FOLDER . '@@', '', self::$PATH . '@@');
    Собственно, вопрос: что за @@ ?
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А откуда нам знать?
     
  3. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Your, спасибо. Из вашего ответа я понял, что это не имеет отношение к каким-нибудь волшебным/стандартным/документированным штукам.
     
  4. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Все очень просто. Если self::$PATH = '/data/templates', а self::$FOLDER = '/data/temp', то замена без собак дала бы 'lates', а с собаками - '/data/templates@@'. Короче, смысл в том, что если в конце PATH находится FOLDER, ее оттуда удаляют
     
  5. xaocbozzz

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

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    1.
    Код (Text):
    1. $FOLDER = 'temp'
    2. $PATH = '/data/templates';
    3. $ROOT = str_replace($FOLDER , '', $PATH); // str_replace('temp', '',  '/data/templates');
    4. echo $ROOT; // /data/lates
    2.
    Код (Text):
    1. $FOLDER = 'temp'
    2. $PATH = '/data/templates';
    3. $ROOT = str_replace($FOLDER . '@@' , '', $PATH . '@@'); // str_replace('temp@@', '',  '/data/templates@@');
    4. echo $ROOT; // /data/templates@@
    А собак в получившемся пути куда девать?
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    удалить еще одним str_replace.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    согласен. такая простая задача и такое странное решение.

    все же просто. вот есть путь
    $PATH = '/data/templates';
    на что он указывает? это путь до каталога или до файла? )
    чтобы избежать этой двусмысленности, нужно работать с путями каталогов корректно, а именно - добавлять в конец всегда слеш:

    $PATH = '/data/templates/';
    а это путь до каталога или до файла? однозначно видно что до каталога.

    если так делать, то подобные замены можно производить без всяких собак.
    надо просто данные приводить сначала в корректное состояние. тогда с ними работать будет легко
    Код (PHP):
    1. $FOLDER = 'temp/'
    2. $PATH = '/data/templates/';
    3. $ROOT = str_replace($FOLDER , '', $PATH); // str_replace('temp/', '',  '/data/templates/');
    4. echo $ROOT; // /data/templates/   
     
  8. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Раз:
    http://goo.gl/lfnol
    Два:
    Юзать желательно не слэши, а DIRECTORY_SEPARATOR. А то потом боль начинается, когда на винде пилят проект, наткают слеши как попало, и пилят треды про "Помогите, не работает на сервере". Неопытные человечки на раз в такое вляпываются.