сынып пен интерфейс php арасындағы автокөлік айырмашылығы

Менде келесі мәселені іздеймін. Біздің жобамыздың сынып файлының атаулары logon.class.php деп аталады Бірақ сол сынып үшін интерфейс файлы logon.interface.php деп аталады

Менің мәселе, егер автокөлік әдісі іске қосылса, мен бұл сыныптың қоңырауы немесе интерфейс қоңырауы екенін анықтай аламын.

<?php 
function __autoload($name){
    if($name === is_class){
        include_once($name.'class.php');
    }elseif ($name === is_interface){
         include_once($name.'interface.php');
    }
}
?>
2
Бірдей атаумен сыныпты және интерфейсті қалай анықтауға болады және екеуін де пайдалануды күте аласыз? Оны іске қосып көріңіз: class x {} интерфейсі x {}
қосылды автор Explosion Pills, көзі
Мен Стойстың ақысын да жасаймын. Менде интерфейстер үшін IClassName, сыныптар үшін дерексіз сыныптар үшін AClassName және CClassname бар.
қосылды автор F21, көзі
@Tandu дегеннен басқа, PSR-0 . Айтарлықтай.
қосылды автор igorw, көзі
Әдетте мен I файл атауын және интерфейс атауын қосамын
қосылды автор Stoosh, көзі
Бұрын i интерфейс алдында осы префиксті қолданған. Бірақ қазір аттар кеңістігін пайдаланып, интерфейс үшін арнайы аттар кеңістігі бар
қосылды автор Jan Van Looveren, көзі

3 жауаптар

ReflectionClass :: isInterface пайдаланып, сынып интерфейсі .

$reflection = new ReflectionClass($name);

if ($reflection->isInterface()){
  //Is an interface
}else{
  //Not an interface
}

Сіздің жағдайда $ name.interface.php және $ name.class.php file_exist сөзін бірінші кезекте пайдалануыңыз керек еді. олар бар, бар болуын талап етеді, содан кейін интерфейс екенін тексеріңіз.

Алайда, менің ойымша, бұл жолдағы қиындықтарды тудыруы мүмкін. Егер сізде MyClass.class.php және MyClass.interface.php болса?

3
қосылды
Бұл сыныптың данасын талап етеді.
қосылды автор Explosion Pills, көзі
Сіз дұрыссыз, бірақ сіз мұны тек сыныптар үшін ғана жасай аласыз.
қосылды автор Explosion Pills, көзі
@tandu, ReflectionClass 'contructor қажет емес, мысалы қажет. Сынып атауының жолында өтуге болады.
қосылды автор F21, көзі
@xdazz: Пожалуйста, жақсылап ойластырыңыз :)
қосылды автор F21, көзі
Автокөліктегі көріністі пайдалану өте нашар идея.
қосылды автор xdazz, көзі

Сынып атының қақтығыстарын болдырмау үшін аттар кеңістігін пайдалануға болады. PSR-0 техникалық сипаттамаларын тексеріңіз.

Сондай-ақ, бұл жіберіңіз . Егер файлды мазмұнын оқып шықпас бұрын оқыған болсаңыз, онда файлды Интерфейс немесе класс бар ма деп түсінуге болады және сыныпты/интерфейсті нақты жүктеместен көре аласыз. Интерфейстер мен сыныптар бірдей атқа ие болмайтынын есте сақтаңыз

Ескерту: Осы әдісті қолданып, интерфейстің атын орындау уақытында өзгертуге болады (сыныпты жүктегенге дейін, бірақ бұл өте жақсы тәжірибе сияқты көрінеді)

0
қосылды

Сіздің сыныптарыңыз бен интерфейстеріңіз үшін кейбір атау туралы конвенцияларыңыз болуы керек, мысалы: сіздің сынып атауы logon және интерфейс аты logon_interface , содан кейін екі арасындағы оңай ажыратуға болады. Мысалы, астыңғы сызық арқылы $ name жарылыс жасаңыз және соңғы элемент interface екенін тексеріңіз.

0
қосылды