За последние 24 часа нас посетили 22523 программиста и 1145 роботов. Сейчас ищут 617 программистов ...

Не получается подключить класс с трейтами через пространство имен.

Тема в разделе "Сделайте за меня", создана пользователем Nikolayyzp, 6 ноя 2019.

  1. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Помогите понять как правильно подключить классы через пространство имен, если в классе находятся трейты.
    У меня выдает ошибку: Fatal error: Trait 'ru\myru\Car\СanMove' not found in W:\domains\mysite.local\Файлы\3.10\class Car.php on line 4

    Вот производный код:
    <?php
    trait СanMove { //Создаем трейт СanMove
    public function move(){ //Создаем метод move
    echo '<br />Движение автомобиля';} //Реализуем метод move()
    }
    trait СanFly { //Создаем трейт СanFly
    public function fly(){ //Создаем метод fly
    echo '<br />Полёт самолёта';}//Реализуем метод fly()
    }
    class Car { //Создайте класс Car
    public function move();
    use СanMove,СanFly;//подключите трейты CanMove и СanFly
    }

    class Aircraft { //Создайте класс Aircraft
    public function fly();
    use СanMove,СanFly;////подключите трейты CanMove и СanFly
    }
    $int = new Car(); //Создание объекта класса Car
    echo $int->move(); //Вызываем у объекта класса Car метод move()
    $intf = new Aircraft(); //Создание объекта класса Aircraft
    echo $intf->fly(); //Вызываем у объекта класса Aircraft метод fly()
    echo $intf->move(); //Вызываем у объекта класса Aircraft метод move()
    ?>

    А ето то что хочю получить, разбив трейты и классы по файлам:

    <?php
    use ru\myrusakov\СanMove;
    use ru\myrusa\СanFly;
    use ru\myru\Car;
    use ru\myr\Aircraft;
    require_once 'W:\domains\mysite.local\Файлы\3.10\trait СanMove.php';
    require_once 'W:\domains\mysite.local\Файлы\3.10\trait СanFly.php';
    require_once 'W:\domains\mysite.local\Файлы\3.10\class Car.php';
    require_once 'W:\domains\mysite.local\Файлы\3.10\class Aircraft.php';
    $int = new Car(); //Создание объекта класса Car
    echo $int->move(); //Вызываем у объекта класса Car метод move()
    $intf = new Aircraft(); //Создание объекта класса Aircraft
    echo $intf->fly(); //Вызываем у объекта класса Aircraft метод fly()
    echo $intf->move(); //Вызываем у объекта класса Aircraft метод move()
    ?>

    Подскажите что не так?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. namespace ru\myru\Car;
    4.  
    5. trait CanMove { ... }
    --- Добавлено ---
    и во всех ост, пространства нужны
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    хочУ правильно
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    на форуме используй ббкоды [code] и [php]. тогда твой код будет читаться хорошо.
    пример с [php].
    PHP:
    1. <?php
    2. use ru\myrusakov\СanMove;
    3. use ru\myrusa\СanFly;
    4. use ru\myru\Car;
    5. use ru\myr\Aircraft;
    6. require_once 'W:\domains\mysite.local\Файлы\3.10\trait СanMove.php';
    7. require_once 'W:\domains\mysite.local\Файлы\3.10\trait СanFly.php';
    8. require_once 'W:\domains\mysite.local\Файлы\3.10\class Car.php';
    9. require_once 'W:\domains\mysite.local\Файлы\3.10\class Aircraft.php';
    10. $int = new Car(); //Создание объекта класса Car
    11. echo $int->move(); //Вызываем у объекта класса Car метод move()
    12. $intf = new Aircraft(); //Создание объекта класса Aircraft
    13. echo $intf->fly(); //Вызываем у объекта класса Aircraft метод fly()
    14. echo $intf->move(); //Вызываем у объекта класса Aircraft метод move()
    15. ?>
    в своих скриптах используй автозагрузку классов и тогда тебе не придётся вручную писать все эти require_once !
     
  5. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    на форуме используй ббкоды [code] и [php]. тогда твой код будет читаться хорошо.
    пример с [php].
    Спасибо учту.
    Использую автозагрузку, все работает только если айлы в ключевой папке, как указать путь к папке?

    И через апстранство имен ппережнему выдает ошибку.

    PHP:
    1. spl_autoload_register(function ($class_name) {
    2.     include $class_name . '.php';
    3. });
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    @Nikolayyzp чувааак! ну не обязательно всё изобретать самому. примеров реализации автолоадинга миллион.
    а можно довериться php composer и его автолоадеру. всё равно все его используют в более-менее крупных проектах.

    я не знаю что такое "ключевая папка", это твой собственный термин походу. :)
    указать путь можно относительно папки с текущим файлом, то есть папки в которой находится автолоадер — через встроенную константу __DIR__
    PHP:
    1. $filename = . . . . ; // преобразуй имя класса в путь как тебе нравится
    2. include __DIR__ . $filename; // путь относительно папки с ЭТИМ файлом
    "выдаёт ошибку" — прочитай текст ошибки. обычно там всё доходчиво объяснено.
    --- Добавлено ---
    Пример автозагрузки в стандарте PSR-4: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
    Пример автозагрузки в стандарте PSR-0: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md#example-implementation
     
  7. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Вот мой код полностью, только все отдельными файлами:

    lesson.php

    PHP:
    1. <?php
    2. use ru\myrusakov\СanMove;
    3. use ru\myrusa\СanFly;
    4. use ru\myru\Car;
    5. use ru\myr\Aircraft;
    6. require_once 'W:\domains\mysite.local\Файлы\3.10\СanMove.php';
    7. require_once 'W:\domains\mysite.local\Файлы\3.10\СanFly.php';
    8. require_once 'W:\domains\mysite.local\Файлы\3.10\Car.php';
    9. require_once 'W:\domains\mysite.local\Файлы\3.10\Aircraft.php';
    10.   $int = new Car();  //Создание объекта класса Car
    11.     echo $int->move(); //Вызываем у объекта класса Car метод move()
    12.    $intf = new Aircraft();  //Создание объекта класса Aircraft
    13.     echo $intf->fly();    //Вызываем у объекта класса Aircraft метод fly()
    14.     echo $intf->move(); //Вызываем у объекта класса Aircraft метод move()
    15. ?>
    СanMove.php

    PHP:
    1. <?php
    2. namespace ru\myru\Car\СanMove;
    3. trait СanMove {  //Создаем трейт СanMove
    4.         public function move(){ //Создаем метод move
    5.         echo '<br />Движение автомобиля';} //Реализуем метод move()
    6.     }
    7. ?>
    СanFly.php

    PHP:
    1. ?php
    2. namespace ru\myrusa\СanFly;
    3. trait СanFly {  //Создаем трейт СanFly
    4.         public function fly(){  //Создаем метод fly
    5.         echo '<br />Полёт самолёта';}//Реализуем метод fly()
    6.     }
    7. ?>
    Car.php

    PHP:
    1. <?php
    2. namespace ru\myru\Car;
    3. class Car {  //Создайте класс Car
    4.        use СanMove,СanFly;//подключите трейты CanMove и СanFly
    5.            }
    6. ?>
    Aircraft.php

    PHP:
    1. <?php
    2. namespace ru\myr\Aircraft;
    3. class Aircraft {  //Создайте класс Aircraft
    4.         use СanMove,СanFly;////подключите трейты CanMove и СanFly
    5.        }
    6. ?>
    Уже долго бьюсь над проблемой не могу решить не как .
    Исправьте пожалуйста код и объясните что не так? Уже все перепробовал :(
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Такс. Тема переезжает в раздел для халявщиков.
    --- Добавлено ---
    1. у взрослых разработчиков пространство имён и путь к файлу связаны очевидным правилом. у тебя такого правила как-то не заметно. наверное в этом проблема.
    2. никогда не пиши в include/require полный путь от корня. он всегда должен быть относительным.
     
    Белояръ нравится это.
  9. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Буду пробовать как получится отпишусь.
     
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    А книги пробовал читать?
     
  11. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Посоветуйте )))
     
  12. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Nikolayyzp, Метт Зандстра РНР объекты шаблоны и методики программирования
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    @Nikolayyzp, Я первым постом конкретно написал все как нужно !

    Ну какого ***** ты *****, берешь и снова не так делаешь, даже копи-пастом !!! ну пи3дец товарищи
     
  14. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0

    Я пытаюсь подставить у меня ошибку ту же выдает?
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    покажи код как ты подставил
     
  16. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. namespace ru\myru\Car;
    3. trait CanMove{};
    4. trait СanFly{};
    5. class Car {  //Создайте класс Car
    6.    abstract public function move();
    7.        use СanMove,СanFly{};//подключите трейты CanMove и СanFly
    8.            }
    9. ?>
    Как то так ничего понять не могу всевремя ошибки?
     
  17. Nikolayyzp

    Nikolayyzp Новичок

    С нами с:
    5 ноя 2019
    Сообщения:
    8
    Симпатии:
    0
    Сделал путь относительным, таже ошибка.
    PHP:
    1. <?php
    2. use ru\myrusakov\СanMove;
    3. use ru\myrusa\СanFly;
    4. use ru\myru\Car;
    5. use ru\myr\Aircraft;
    6. require_once __DIR__ .'\Файлы\3.10\СanMove.php';
    7. require_once __DIR__ .'\Файлы\3.10\СanFly.php';
    8. require_once __DIR__ .'\Файлы\3.10\Car.php';
    9. require_once __DIR__ .'\Файлы\3.10\Aircraft.php';
    10.   $int = new Car();  //Создание объекта класса Car
    11.     echo $int->move(); //Вызываем у объекта класса Car метод move()
    12.    $intf = new Aircraft();  //Создание объекта класса Aircraft
    13.     echo $intf->fly();    //Вызываем у объекта класса Aircraft метод fly()
    14.     echo $intf->move(); //Вызываем у объекта класса Aircraft метод move()
    15. ?>
     
  18. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Какая та же? Никто не следит за твоей драмой , пиши полностью что происходит .

    Двигайся от простого к сложному. Попробуй сначала всё в одном файле описать, как тебе Маус предложил. Потом один трейт вынеси в другой файл и подключи через require и т.д.

    Не используй кириллицу в именах и путях к файлам.