Как вы изолируете вложенные зависимости в PHP?

У меня есть три файла, foo.php, bar.php, а также baz.php, каждый includeсделаю следующее, следующим образом:

foo.php

<?php

$missile_launch_codes = [
'missileA' => '...',
'missileB' => '...',
'missileC' => '...'
];

bar.php

<?php

require('foo.php');

function try_to_launch($launch_code) {
...
}

function launch_missile($missile_name) {
if (in_array($missile_name, $missile_launch_codes)) {
return try_to_launch($missile_launch_codes[$missile_name]);
} else {
return false;
}
}

baz.php

require('bar.php')

if (...) {
launch_missile(...);
}

Файл baz.php должен быть в состоянии использовать launch_missile(), но он определенно не должен иметь доступа к $missile_launch_codes, Как бы я изолировать $missile_launch_codes импортировано из foo.php держать их подальше от baz.php?

0

Решение

Что вы можете сделать, это Объектно-ориентированный путь:

Missile.php

Class Missile
{

private $missile_launch_codes = [
'missileA' => '...',
'missileB' => '...',
'missileC' => '...'
];

private function try_to_launch($launch_code) {
...
}

public function launch_missile($missile_name) {
if (in_array($missile_name, $this->missile_launch_codes)) {
return $this->try_to_launch($this->missile_launch_codes[$missile_name]);
} else {
return false;
}
}

}

Launch.php

include('Missile.php');
Class Launch extends Missile
{
if (...) {
$this->launch_missile(...);
}
}

Вот, $missile_launch_codes может быть доступен только для класса Missile только как заявлено private,

0

Другие решения

Если бы я был тобой, ты должен сделать это в ООП. Вы можете сделать это таким образом …

foo.php:

class Foo {
protected function missile_launch_codes() {
return [
'missileA' => '...',
'missileB' => '...',
'missileC' => '...'
];
}
}

bar.php:

class Bar extends Foo {
public function try_to_launch($launch_code) {
...
}

public function launch_missile($missile_name) {
if (in_array($missile_name, $missile_launch_codes)) {
return try_to_launch($this->missile_launch_codes[$missile_name]);
} else {
return false;
}
}
}

baz.php

class Baz extends Bar {
// you cannot access missile_launch_codes() here
}

Постарайтесь больше узнать об ООП, чтобы понять, что я пытаюсь здесь сказать.

0

По вопросам рекламы [email protected]