Я разработчик Frontend, и я решил расширить свои знания изучения PHP. Я все еще изучаю синтаксис / способы выполнения вещей, поэтому, пожалуйста, потерпите меня.
Когда я начал работать над своим первым PHP-проектом, я понял, что мне нужно создать карту путей, чтобы все было чисто и сухо.
Вот как выглядит моя php структура файла:
Это легко представить, используя JSON-подобную структуру данных, но я нашел трудное время, пытаясь добиться этого с помощью типов данных PHP (я все еще изучаю синтаксис / способы выполнения действий).
Я немного читал, и я решил использовать некоторые ассоциативные массивы,
Я придумал это решение, которое работает, но я хотел проверить, возможно ли более простое решение. (Я стремлюсь изучить лучшие практики PHP)
Увидеть:
$paths = array(
'dirs' => array(
'base' => '/php/'
)
);
$paths['dirs']['common'] = $paths['dirs']['base'] . 'common/';
$paths['dirs']['home'] = $paths['dirs']['base'] . 'home/';
$paths['files'] = array(
'home' => $paths['dirs']['home'] . 'home.php',
'header' => $paths['dirs']['common'] . 'header.php',
'scripts' => $paths['dirs']['common'] . 'scripts.php',
'footer' => $paths['dirs']['common'] . 'footer.php',
'core' => $paths['dirs']['base'] . 'core.php',
'business-variables' => $paths['dirs']['base'] . 'business-variables.php'
);
Я делаю плохие практики здесь?
Есть ли лучший / простой / стандартный способ сделать это?
Если вам нужно работать с файлами — лучший и самый простой способ — это использовать DirectoryIterator. В этом случае каждый файл будет объектом, и вы можете использовать его методы. Вот небольшой пример:
// or '/php/' in your case
$path = '/';
foreach (new DirectoryIterator($path) as $file) {
if ($file->isDot()) continue;
if ($file->isDir()) {
print $file->getFilename() . '<br/>';
}
}
При условии, что вы не можете просто прочитать структуру папок, используя DirectoryIterator…
Для удобства чтения я бы сделал что-то вроде этого:
class FileStructure {
const BASE = '/php/';
const COMMON = 'common/%s';
const HOME = 'home/%s';
public function Paths(){
return array(
'home' => $this->Home('home.php'),
'header' => $this->Common('header.php')
);
}
private function Common($file = null){
return sprintf(static::BASE.static::COMMON, $file);
}
private function Home($file = null){
return sprintf(static::BASE.static::HOME, $file);
}
}