1 Востаннє редагувалося Rookie (13.11.2015 15:09:54)

Тема: Як козаки роботу шукали.

ЗАОХОЧЕННЯ щодо пошуку роботи:
Запрошую надiслати вашиx тестiв на iнших мовах також (окрiм JAVA), бо маю себе перевiрити та знайти друзiв по виробничому цеху.

РНР программування, звисно рiч не проста. Особливо якщо ти бiльш поважаешь С in Linux або маешь внутрiшню вiдповiдальнiсть за СPU-low-costing програмний чартер. Адже, якщо ти повний ламер з описа iнших, маешь задавати питання поважним людям. Тому...
Довелося менi зустрiти на цьому форумi гуру РНР що блукав у пошуках жодного файного junior майже 2 роки. Я отримав завдання. Вiн отримав вiдповiдь. Менi до лоба - брудний ярлик ламера. Адже це не лiчить козаковi iз гучним iм'ям Rookie. Тому, шановнi, маю до вас запитання де та що помити рефакторiнгово? Прошу прийняти до зауваження - адже ранiше у життi до цього випадку я нiколи не працював у РНР, та мав довести швидке самонавчання за день.
Завдання:

#### php

<?

  interface FileInterface {

    /**
     * Constructor
     * @param string $filePath
     */
    public function __construct($filePath);


    /**
     * Returns the file name
     *
     * @return string the relative path
     */
    public function getFileName();


    /**
     * Check if file located in specific directory
     *
     * @param DirectoryInfo $directory
     * @return boolean
     */
    public function isInDirectory(DirectoryInfo $directory);

  }


  /**
   * Реалізувати клас
   */
  class DirectoryInfo {
    # ваш код тут
  }

  /**
   * Реалізувати інтерфейс
   */
  class File implements FileInterface {
    # ваш код тут
  }


  # цей код має працювати
  $file = new File(__FILE__);
  $file->isInDirectory(new DirectoryInfo(__DIR__)); // return true


  $file = new File('/tmp/data/test.txt');
  $file->isInDirectory(new DirectoryInfo('/tmp/data/')); // return true
  $file->isInDirectory(new DirectoryInfo('/tmp')); // return true
  $file->isInDirectory(new DirectoryInfo('/tmp/other')); // return false
  $file->isInDirectory(new DirectoryInfo('/tmp/data/test')); // return false

  $file->getFileName(); //return test.txt

?>

Рiшення:

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

    class DirectoryInfo {
        
        private static $s_dir_path;
        private static $ar_dir_files = array();
        
        function __construct($o_fileDir) {
            self::$s_dir_path = $o_fileDir;
            self::$ar_dir_files = scandir($o_fileDir);
        }
        
        function __destruct() {
        }
        
        public function getDirName() {
            return self::$s_dir_path;
        }
        
        public function getListFiles() {
            return self::$ar_dir_files;
        }
    }

    interface FileInterface {
        
        public function getFileName();
        public function isInDirectory(DirectoryInfo $directory);
    }

    class File implements FileInterface {

        private static $s_file_path;
        private static $s_dir_name;
        private static $ar_dir_files = array();
        
        function __construct($s_file_path) {
            self::$s_file_path = $s_file_path;
            $o_dirname = new DirectoryInfo(dirname($s_file_path));
            self::$s_dir_name = $o_dirname->getDirName();
            self::$ar_dir_files = $o_dirname->getListFiles();
        }
        
        function __destruct() {
        }
        
        public function getFileName() {
             return basename(self::$s_file_path);
        }
        
        public function isInDirectory(DirectoryInfo $directory) {
            
            $s_temp = dirname(self::$s_file_path);
            
            if (!in_array(self::getFileName(), self::$ar_dir_files)) {
                return false;
            }
            // for Linux file root
            while ('/' !== $s_temp) {
                if ($directory->getDirName() != $s_temp) {
                    $s_temp = dirname($s_temp);
                } else {
                      return true;
                  }
            }
            return false;
        }
    }

2

Re: Як козаки роботу шукали.

Десь тут була тема про "Некомпетентних ідіотів", але там доколупалися до розділових знаків. У Вас же - просто пипець із словами і реченнями. То, певне, тут є деяка кореляція із вашим кодом та проблемами з роботою. Чекаю нової теми "Як козаки навчалися.

п.с. не раджу зв'язуватися з PHP взагалі, та й з тим Delphi, яке тут почало маячити (хай пробачать паскалісти/дельфісти, але проти фактів не попреш)

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/

3

Re: Як козаки роботу шукали.

Менi до лоба - брудний ярлик ламера.

Такі слова мають мати обґрунтування. Вони були?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: 0xDADA11C71

4

Re: Як козаки роботу шукали.

quez написав:

Менi до лоба - брудний ярлик ламера.

Такі слова мають мати обґрунтування. Вони були?

Авжеж були. Одне iм'я чого коштуе - Rookie. Звiсно ламер. Щодо вашого запитання, адже я не маю схильностей до обговорювання за глаза. Якщо людина буде мати бажання - сама розповiсть. Тому все що я маю - це код, до якого я причетний, та питання про помилки, якщо ви здатнi перевiрити output. Мое життя досить замале щоб витрачати його на зайвi балачки щодо значимостi моеi персони. Тому я звертаюсь до людей дiйства, а не теревень.

5 Востаннє редагувалося VTrim (13.11.2015 18:24:18)

Re: Як козаки роботу шукали.

А якщо в каталозі будуть тисячі файлів?
Ви все це смикаєте і тримаєте в масиві і потім ще раз перевіряєте на наявність вашого файлу в цьому масиві.
Є готові функції..
Я реалізував це простіше..
Див. тут.. http://replace.org.ua/topic/5695/

=)

6

Re: Як козаки роботу шукали.

Далі.. метод isInDirectory ніяк не привязаний до класу DirectoryInfo,а має,бо приймає його в аргумент.

=)

7 Востаннє редагувалося Vo_Vik (13.11.2015 18:49:37)

Re: Як козаки роботу шукали.

Це якась специфіка переходу з java чи що, вже не перший раз бачу що люди після неї в php прагнуть до використання статичних параметрів і методів. І паряться тими селфами.
Помятайте. PHP інтерпритатор і його тред вбивається одразу після виконання.
І два. Чи хтось казав в завданні перевіряти чи дійсно файл фізично існує в дерикторії? Там як на мене було питання просто порівння шляхів файла і директорії.

8 Востаннє редагувалося Itari (13.11.2015 18:57:27)

Re: Як козаки роботу шукали.

де та що помити рефакторiнгово?

Хтось, поясніть мені, не дуже гарному знавцеві украінської мови - як це речення розуміти?

це не лiчить козаковi iз гучним iм'ям Rookie.

А що такє "Rookie"? Я знаю "Рукия", а Rookie... Що гучного у цьому нікові?

та мав довести швидке самонавчання за день.

Так можливо треба було взяти дещо простіше ніж це?

Подякували: funivan1

9

Re: Як козаки роботу шукали.

VTrim написав:

А якщо в каталозі будуть тисячі файлів?
Ви все це смикаєте і тримаєте в масиві і потім ще раз перевіряєте на наявність вашого файлу в цьому масиві.
Є готові функції..
Я реалізував це простіше..
Див. тут.. http://replace.org.ua/topic/5695/

А якщо 1000 юзерiв звернуться до вашого сайту по ваш несмикаючий заздалогiдь у кеш метод, сервер не стане паровозом?
Хiба вам бабуся про техничне завдання не казала казки на нiч?
Я не бачу там про 1000 файлiв i не чаклун.
Алеж для серверу понад усе важливо time response

10

Re: Як козаки роботу шукали.

Itari написав:

де та що помити рефакторiнгово?

Хтось, поясніть мені, не дуже гарному знавцеві украінської мови - як це речення розуміти?

це не лiчить козаковi iз гучним iм'ям Rookie.

А що такє "Rookie"? Я знаю "Рукия", а Rookie... Що гучного у цьому нікові?

та мав довести швидке самонавчання за день.

Так можливо треба було взяти дещо простіше ніж це?

Так. Зараз я вивчаю що таке Itari

11

Re: Як козаки роботу шукали.

VTrim написав:

Далі.. метод isInDirectory ніяк не привязаний до класу DirectoryInfo,а має,бо приймає його в аргумент.

Сам здогадки не маю як воно працюе. Мабуть __construct() якийсь дивний. Я не дуже розумний на цьому

12

Re: Як козаки роботу шукали.

Rookie написав:

А якщо 1000 юзерiв звернуться до вашого сайту по ваш несмикаючий заздалогiдь у кеш метод, сервер не стане паровозом?
Хiба вам бабуся про техничне завдання не казала казки на нiч?
Я не бачу там про 1000 файлiв i не чаклун.
Алеж для серверу понад усе важливо time response

Ну наразі ви ніяк кеш не використали. Ваш сервер просто буде 1000 разів смикати те саме і тримати в памяті. І швидше всього просто зависне.

13

Re: Як козаки роботу шукали.

Rookie написав:
VTrim написав:

А якщо в каталозі будуть тисячі файлів?
Ви все це смикаєте і тримаєте в масиві і потім ще раз перевіряєте на наявність вашого файлу в цьому масиві.
Є готові функції..
Я реалізував це простіше..
Див. тут.. http://replace.org.ua/topic/5695/

А якщо 1000 юзерiв звернуться до вашого сайту по ваш несмикаючий заздалогiдь у кеш метод, сервер не стане паровозом?
Хiба вам бабуся про техничне завдання не казала казки на нiч?
Я не бачу там про 1000 файлiв i не чаклун.
Алеж для серверу понад усе важливо time response

Ваш варіант так чи інакше буде працювати повільніше. Навіть без тисяч файлів.

=)

14

Re: Як козаки роботу шукали.

Vo_Vik написав:

.
І два. Чи хтось казав в завданні перевіряти чи дійсно файл фізично існує в дерикторії? Там як на мене було питання просто порівння шляхів файла і директорії.

А що таке шлях до неiснуючого файла або директорii та де, як i навiщо цi шляхи зберiгаються?

15 Востаннє редагувалося Itari (13.11.2015 21:02:07)

Re: Як козаки роботу шукали.

Зараз я вивчаю що таке Itari

Це моє ім'я на східній іноземній мові.

А що таке шлях до неiснуючого файла або директорii та де, як i навiщо цi шляхи зберiгаються?

Це випадково чи навмисно заданий шлях, якого нема. Він ніде не зберігаешься, це звичайна строка символів, на яку функції роботи з об'єктами файлової системі видають помилку.

16

Re: Як козаки роботу шукали.

Rookie написав:
Vo_Vik написав:

.
І два. Чи хтось казав в завданні перевіряти чи дійсно файл фізично існує в дерикторії? Там як на мене було питання просто порівння шляхів файла і директорії.

А що таке шлях до неiснуючого файла або директорii та де, як i навiщо цi шляхи зберiгаються?

не сприймате фізично. Сприймате просто як дві строки які вам треба порівняти.

17

Re: Як козаки роботу шукали.

Vo_Vik написав:
Rookie написав:
Vo_Vik написав:

.
І два. Чи хтось казав в завданні перевіряти чи дійсно файл фізично існує в дерикторії? Там як на мене було питання просто порівння шляхів файла і директорії.

А що таке шлях до неiснуючого файла або директорii та де, як i навiщо цi шляхи зберiгаються?

не сприймате фізично. Сприймате просто як дві строки які вам треба порівняти.

Do You know, buddy, what is the meaning for SCOPE. Строка iснуе, але у доменi РНР. А ось файл, як i сама файлова система з розподiлами з‘являеться ще навiть до появи OS (вiртуальну ФС навiть i не будемо чипляти). Тому щоб звернутися до неi як до строки РНР не може мати анi методу анi iнтерфейсу. Вiн раб лампи ФАЙЛОВОI СИСТЕМИ. Адже, пора спати... Добранiч.

18

Re: Як козаки роботу шукали.

щоб звернутися до неi як до строки РНР не може мати анi методу анi iнтерфейсу.

Щоб звернутися до чого? До файлу? Це не є функція PHP. Це питання цілком до ОС. Тому як раз інтерфейс між ОС та PHP є.

Вiн раб лампи ФАЙЛОВОI СИСТЕМИ.

Кто? PHP?? Що за маячня?

19

Re: Як козаки роботу шукали.

Нє. Я стільки не випив ще.
'/tmp/data/test.txt' і '/tmp/data/' - звичайні строки в пхп. Невже їх проблема порівняти?

20

Re: Як козаки роботу шукали.

Vo_Vik написав:

Нє. Я стільки не випив ще.
'/tmp/data/test.txt' і '/tmp/data/' - звичайні строки в пхп. Невже їх проблема порівняти?

Я не п'ю зовсiм, тому маю iнший розсуд.
Порiвняння якихось строк не дае абсолютно нiякоi iнформации щодо файловоi системи. Цю iнформацiю дае лише запит-звернення безпосередньо до файловоi системи, яка заключае у собi у тому числi й РНР. Та якщо до файловоi системи надсилати запитання про неiснуюче, то нiчого окрiм ERROR та EXIT у вiдповидь ви не отримаете. Але ж навiщо вам EXIT, якщо ви бажаете дiйти до кiнця.