Дар ООП дар PHP барои худкор бор кардани синфҳо функсияи худсоз
Аксар вақт боркунии худкор бо супориш шумо метавонад барои шумо барои ягон сабаб мувофиқ набошад. Дар чунин ҳолат, шумо метавонед боркунии худкори худро нависед.
Барои ин, ба функсияи spl_autoload_register
ба ҳамчун параметри аввал функсияи callback-и навиштаи
шумо бояд гузаронида шавад. Ин функсия фарохонда мешавад,
вақте ки PHP муроҷият ба синфи бор нашударо мушоҳида мекунад.
Ба параметри ин функсия
номи синф бо фазои номҳо меафтад:
<?php
spl_autoload_register(function($class) {
// дар тағирёбандаи $class номи синф бо фазои номҳо хоҳад буд
});
?>
Ва вазифаи функсия ин хоҳад буд, ки ба воситаи номи синф
бор кардани он синфро тавассути require иҷро кунад.
Яъне дар дохили ин функсия мо бояд қоидаи худро барои бор кардани синфҳо, яъне
эътилофи номгузории худро нависем.
Биёед мисоле аз як боркунии худкори худро нависем. Бигзор, масалан, мо мегӯем, ки роҳ ба файли синф аз решаи сомона чунин хоҳад буд, ки монанди фазои номҳо, аммо бо нигоҳ доштани регистри аломатҳо.
Яъне, агар мо синфи Core\Admin\PageController дошта бошем,
пас роҳ ба он бояд Core/Admin/PageController.php бошад.
Чунон ки шумо мебинед, барои табдил додани номи синф
бо фазои номи он танҳо бояд
символҳои каҷро ба рост иваз кард, ва ба номи синф
.php илова кард. Биёед инро анҷом диҳем:
<?php
spl_autoload_register(function($class) {
$filename = str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Бо вуҷуди ин, ба мо роҳи нисбӣ ба файл хоҳад омад (нисбат ба решаи сомона). Беҳтар аст роҳи мутлақ созед, ин тавр:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$filename = $root . '/' . str_replace('\\', '/', $class) . '.php';
require($filename);
});
?>
Як нюанси дигар ҳаст. Дар системаҳои амалиётии гуногун
роҳ ба воситаи ҷилдҳо метавонад бо симоли каҷи рост
ё бо каҷ бошад. Биёед коди худро аз системаи амалиётӣ
мустақил созем. Барои ин ба ҷои
симоли каҷи рост барои ҷудо кардани роҳҳо константаи DIRECTORY_SEPARATOR-ро
гузорем,
ки симоли каҷи дурусти он системаи амалиётиро дар бар мегирад,
ки дар он ҳозир скрипти мо оғоз мешавад. Дар охир коди зеринро мегирем:
<?php
spl_autoload_register(function($class) {
$root = $_SERVER['DOCUMENT_ROOT'];
$ds = DIRECTORY_SEPARATOR;
$filename = $root . $ds . str_replace('\\', $ds, $class) . '.php';
require($filename);
});
?>
Функсияи боркунии худкори эҷодкардаи манро санҷед.
Қоидаи худро барои боркунии худкор дарёбед ва онро амалӣ кунед.