0

I have three files, foo.php, bar.php, and baz.php, each include'd by the next, as follows:

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(...);
}

The file baz.php needs to be able to use launch_missile(), but it definitely shouldn't have access to $missile_launch_codes. How would I isolate the $missile_launch_codes imported from foo.php to keep them out of the hands of baz.php?

TheEnvironmentalist
  • 2,694
  • 2
  • 19
  • 46
  • Have you ever heard about [Object oriented Programming](https://en.wikipedia.org/wiki/Object-oriented_programming)? In that, this concept is called `encapsulation`. – Amit Merchant Feb 08 '18 at 05:00

2 Answers2

0

What you can probably do is this Object-oriented way:

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(...);
    }
}

Here, $missile_launch_codes can only be accessible to class Missile only as it is declared private.

Amit Merchant
  • 1,045
  • 6
  • 21
0

If I were you, you need to make it in OOP. You can do it in this way...

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
}

Try to research more about OOP to understand more what I am trying to say here..

Carl Sare
  • 191
  • 1
  • 14