Помогите понять как правильно подключить классы через пространство имен, если в классе находятся трейты. У меня выдает ошибку: 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() ?> Подскажите что не так?
PHP: <?php namespace ru\myru\Car; trait CanMove { ... } --- Добавлено --- и во всех ост, пространства нужны
на форуме используй ббкоды [code] и [php]. тогда твой код будет читаться хорошо. пример с [php]. PHP: <?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() ?> в своих скриптах используй автозагрузку классов и тогда тебе не придётся вручную писать все эти require_once !
на форуме используй ббкоды [code] и [php]. тогда твой код будет читаться хорошо. пример с [php]. Спасибо учту. Использую автозагрузку, все работает только если айлы в ключевой папке, как указать путь к папке? И через апстранство имен ппережнему выдает ошибку. PHP: spl_autoload_register(function ($class_name) { include $class_name . '.php'; });
@Nikolayyzp чувааак! ну не обязательно всё изобретать самому. примеров реализации автолоадинга миллион. а можно довериться php composer и его автолоадеру. всё равно все его используют в более-менее крупных проектах. я не знаю что такое "ключевая папка", это твой собственный термин походу. указать путь можно относительно папки с текущим файлом, то есть папки в которой находится автолоадер — через встроенную константу __DIR__ PHP: $filename = . . . . ; // преобразуй имя класса в путь как тебе нравится 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
Вот мой код полностью, только все отдельными файлами: lesson.php PHP: <?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\СanMove.php'; require_once 'W:\domains\mysite.local\Файлы\3.10\СanFly.php'; require_once 'W:\domains\mysite.local\Файлы\3.10\Car.php'; require_once 'W:\domains\mysite.local\Файлы\3.10\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() ?> СanMove.php PHP: <?php namespace ru\myru\Car\СanMove; trait СanMove { //Создаем трейт СanMove public function move(){ //Создаем метод move echo '<br />Движение автомобиля';} //Реализуем метод move() } ?> СanFly.php PHP: ?php namespace ru\myrusa\СanFly; trait СanFly { //Создаем трейт СanFly public function fly(){ //Создаем метод fly echo '<br />Полёт самолёта';}//Реализуем метод fly() } ?> Car.php PHP: <?php namespace ru\myru\Car; class Car { //Создайте класс Car use СanMove,СanFly;//подключите трейты CanMove и СanFly } ?> Aircraft.php PHP: <?php namespace ru\myr\Aircraft; class Aircraft { //Создайте класс Aircraft use СanMove,СanFly;////подключите трейты CanMove и СanFly } ?> Уже долго бьюсь над проблемой не могу решить не как . Исправьте пожалуйста код и объясните что не так? Уже все перепробовал
Такс. Тема переезжает в раздел для халявщиков. --- Добавлено --- 1. у взрослых разработчиков пространство имён и путь к файлу связаны очевидным правилом. у тебя такого правила как-то не заметно. наверное в этом проблема. 2. никогда не пиши в include/require полный путь от корня. он всегда должен быть относительным.
@Nikolayyzp, Я первым постом конкретно написал все как нужно ! Ну какого ***** ты *****, берешь и снова не так делаешь, даже копи-пастом !!! ну пи3дец товарищи
Код (Text): <?php namespace ru\myru\Car; trait CanMove{}; trait СanFly{}; class Car { //Создайте класс Car abstract public function move(); use СanMove,СanFly{};//подключите трейты CanMove и СanFly } ?> Как то так ничего понять не могу всевремя ошибки?
Сделал путь относительным, таже ошибка. PHP: <?php use ru\myrusakov\СanMove; use ru\myrusa\СanFly; use ru\myru\Car; use ru\myr\Aircraft; require_once __DIR__ .'\Файлы\3.10\СanMove.php'; require_once __DIR__ .'\Файлы\3.10\СanFly.php'; require_once __DIR__ .'\Файлы\3.10\Car.php'; require_once __DIR__ .'\Файлы\3.10\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() ?>
Какая та же? Никто не следит за твоей драмой , пиши полностью что происходит . Двигайся от простого к сложному. Попробуй сначала всё в одном файле описать, как тебе Маус предложил. Потом один трейт вынеси в другой файл и подключи через require и т.д. Не используй кириллицу в именах и путях к файлам.