За последние 24 часа нас посетили 33707 программистов и 1317 роботов. Сейчас ищут 1014 программистов ...

Проблема с NameSpace

Тема в разделе "PHP для новичков", создана пользователем Danil005, 31 авг 2017.

  1. Danil005

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

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Почему то выдает ошибку, что класс не найден, однако он подключен:
    Fatal error: Uncaught Error: Class 'Base\App\Icons' not found in E:\Server\OpenServer\domains\***\system\core\User\UserInfo.php:40 Stack trace: #0 E:\Server\OpenServer\domains\***\pages\profile\profile.php(42): Base\User\Info::Confidentialitylevel(0) #1 {main} thrown in E:\Server\OpenServer\domains\****\system\core\User\UserInfo.php on line 40

    Icons.php
    PHP:
    1. namespace Base\App;
    2.  
    3. use Base\Interfaces\IconsInterface;
    4.  
    5. class Icons extends \Core implements IconsInterface {
    6.     public static function getIcon ($icon, $color='', $tooltip='', $size='2px') {
    7.         if( !empty($color) ) $color='color="'.$color.'"';
    8.         if( !empty($tooltip) ) $tooltip='data-toggle="tooltip" data-placement="top" title="" data-original-title='.$tooltip.'';
    9.         return '<i class="material-icons"><font '.$color.' size="'.$size.'" '.$tooltip.'>'.$icon.'</font>';
    10.     }
    11. }
    UserInfo.php
    PHP:
    1. namespace Base\User;
    2.  
    3. use Base\App\Icons;
    4. use Base\Auth\CAuth;
    5. use Base\db\SQL_Request;
    6. use Base\Interfaces\UserInfo;
    7.  
    8. class Info extends \Core implements UserInfo {
    9. public static function Confidentialitylevel($type) {
    10.          if( self::CheckUser() ) {
    11.            if( $type == 0 ) {
    12.                if( self::SocialAll('account') == 0 ) return Icons::getIcon('beenhere', 'gray', 'Не идентифицирован');
    13.                if( self::SocialAll('account') == 1 ) return Icons::getIcon('beenhere', 'orange', 'Частично идентифицирован');
    14.                if( self::SocialAll('account') == 2 ) return Icons::getIcon('beenhere', 'green', 'Идентифицирован');
    15.            } elseif( $type == 1 ) {
    16.                if( self::SocialAll('account') == 0 ) return 'анонимный';
    17.                if( self::SocialAll('account') == 1 ) return 'формальный';
    18.                if( self::SocialAll('account') == 2 ) return 'персональный';
    19.            }
    20.          }
    21.      }
    22. }

    --- Добавлено ---
    Класс подключен путем Autoload
    --- Добавлено ---
    Если надо, вот Autoload:
    PHP:
    1. public static $NAMESPACESMAP = [
    2.            Auth\Login::class => 'Authorization\Login',
    3.            Auth\Register::class => 'Authorization\Register',
    4.            Auth\CAuth::class => 'Authorization\CheckLogin',
    5.            Auth\Forgot::class => 'Authorization\Forgot',
    6.            Auth\CActivation::class => 'Authorization\Activation',
    7.  
    8.            App\Checker::class => 'Application\Checker',
    9.            App\ErrorThrow::class => 'Application\ErrorThrow',
    10.            App\OGenerator::class => 'Application\OGenerator',
    11.            App\SuccessMsg::class => 'Application\SuccessMsg',
    12.            App\Icons::class => 'App\Icons',
    13.            App\HeaderLocation::class => 'Application\HeaderLocation',
    14.  
    15.            \db\MySQL::class => 'db/MySQL',
    16.            db\SQL_Placeholders::class => 'db\Sql_Placeholders',
    17.            db\SQL_Request::class => 'db\Request',
    18.  
    19.            User\Info::class => 'User\UserInfo',
    20.  
    21.            Money\MoneyInfo::class => 'Money\MoneyInfo',
    22.  
    23.  
    24.            Interfaces\UserInfo::class => 'Interfaces\UserInfoInterface',
    25.            Interfaces\IconsInterface::class => 'Interface\IconsInterface',
    26.            Interfaces\MoneyInfoInterface::class => 'Interface\MoneyInfoInterface',
    27.        ];
    28.  
    29.        public static function setPatchMap( string $NAME, string $PATCH ) {
    30.            self::$NAMESPACESMAP[$NAME] = $PATCH;
    31.        }
    32.        public static function autoload( $CLASS ) {
    33. //            if(1) {
    34. //               echo "{$CLASS}<br>" . PHP_EOL;
    35. //            }
    36.      
    37.            if ( isset ( self::$NAMESPACESMAP[$CLASS] ) ) $CLASS = self::$NAMESPACESMAP[$CLASS];
    38.      
    39.            include dirname ( __FILE__ ) . DIRECTORY_SEPARATOR . strtr ( $CLASS, '\\', DIRECTORY_SEPARATOR ) . '.php';
    40.        }
    41. namespace {
    42.     spl_autoload_register ( [ \Base\Base::class, 'autoload' ] );
    43. }
     
  2. Михаил Запаленов

    С нами с:
    2 авг 2017
    Сообщения:
    120
    Симпатии:
    1
    Зачем ты подключаешь через autoload это используй пакет camposer. Также код ты зачем усложнил, использовал метод для autoload. Упрости, используй composer.
     
  3. Danil005

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

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Потому что мне удобней использовать autoload без composer, возможно потому что я не умею пользоваться (только подключать и все), но все же, удобней Autoload.
    Я нашел ошибку и она была примитивной, я просто неправильно написал директорию.