Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP including files inside classes

Tags:

php

Just a quick question, but I've been working on a small MVC framework and noticed something.

For example:

--PHP file--

class loadFiles{
        function __construct($file = NULL){
        include $file . '.php';
        }
}
$loadfiles = new $loadFiles('crucialsettings');
echo $randomstring; //Throws an error

--crucialsettings.php--

<?php
    $randomstring = 'hello';
?>

I only just realised that files included inside an objects scope are inaccessable from the global scope. What is the best way to include a file inside an object so it can be accessed globally?

I would like to be able to:

$loadfiles->settings();
$loadfiles->classes();
$loadfiles->passwords();

I want to build a class that handles global file includes.

like image 283
Sam Avatar asked Nov 16 '25 15:11

Sam


1 Answers

It doesn't matter where you include or require code from in PHP. The interpreter is pretty linear in it's first definition pass, that is to say that it will basically compress all of the included / required files into one large file in the exact order in how it was read.

One thing to note about this is that scope does change. but everything is applied to the "global" scope. You can always import something from the global scope into your current scope using the "global" keyword to declare a variable prior to using it. So when you want to use a "global" variable from another script just ask for it.

A little example...

a.php

include('b.php');
global $myVar;
echo $myVar;

b.php

include('c.php');

c.php

$myVar = 'Hello World';

What the interpreter see's this code as after it's first pass

// In global scope
$myVar = 'Hello World'

// In a.php scope
global $myVar;
echo $myVar;

In short from your php file simply add the line

global $randomstring;

After you include the crucialsettings.php file and your echo will work.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!