[英]How do you isolate nested dependencies in PHP?
我有三个文件foo.php , bar.php和baz.php ,每个文件都include
“ d by next”,如下所示:
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的手呢?
您可能可以做的就是这种面向对象的方式:
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
。
如果我是您,则需要在OOP中实现。 你可以用这种方式做...
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
}
尝试研究有关OOP的更多信息,以了解我在这里要说的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.