how to exclude a file after including it in php?
Asked Answered
H

3

6

After we add a file inside Myfile.php with:

require_once 'abc.php';

or

include_once 'abc.php';

How we will remove the file? Or how to stop the abc.php file content being accessed after a certain block of code?

Herwick answered 26/6, 2014 at 17:16 Comment(7)
Why? There something wrong with your logic.Christcross
yes. if its cannot possible I have to spent some 2-3 hours to change my code. I have different files with a class inside them. but some class have same names. so in case i need to access 2 different files with same class, it will throw 'class redeclared error'.Herwick
Shouldn't have classes with the same name. If you can't avoid it (outside libraries) use name spaces: php.net/manual/en/language.namespaces.rationale.phpChisel
@Chisel Ohh no.. I am actually using Gas ORM, which is creating table classes. so for table name user_details and payment_details, it will create classes in user folder and payment folder with details.php file and class - details ..Herwick
OK, and... those classes have different names.Chisel
@Chisel name means namespaces ? yes different ofcourse. its table name itself like - Model\user\details, Model\payment\details.Herwick
I see. That's not a good way for the framework to do it. If there's not a way around it then switch.Chisel
L
16

In PHP, once a resource is included, it can not be removed or "un-included". This is the very principle of PHP file inclusion. See : http://www.php.net/manual/en/function.include.php

The include statement includes and evaluates the specified file.

Once the interpreter has evaluated your code, the job is done. All operations have been taken into account, and in order to undo the changes, you have to perform the opposite operations. For instance, if your included file declares the class MyClass then you would need to undefine it, which is also impossible for very same reason as above. See : Unset Class.

If your file actually adds functions and not classes, then since PHP 5.3, you can use anonymous functions. This allows you to assign functions to variables, which can be unset. See this answer for details.

If a part of your code's logic has to disappear at some point, then you did not spend enough time designing before implementing.

If you need to undo an inclusion because of name conflicts, the problem is pretty much the same. However, a solution in this case would be to use namespaces. Still, a little review of your application design should be enough to avoid such conflicts.

Edit about frameworks : a single framework cannot fit for each and every application. Symfony, for instance, uses namespaces absolutely everywhere to avoid any possible conflicts (yet, some occur). If your framework does not offer you the possibility to easily distinguish two model classes with the same name, then I'd say it does not fit (at least, not with your design).

Lelia answered 26/6, 2014 at 17:28 Comment(1)
if you are trying to avoid unnecessary inclusion, you can enclose the include command within a conditional. Assuming $x != TRUE, the file "thisFile_inc.php" will not be loaded or parsed in the following: if($x=TRUE){include("thisFile_inc.php);}.Party
H
5

You can't. once its loaded cannot be removed.

Hazeghi answered 26/6, 2014 at 17:18 Comment(0)
F
0

There's a workaround. You can include the file while output buffering is turned on. Then save the output into a variable like $output. Use it if you need it, otherwise, just do unset($output) to discard it;

ob_start();
include('file.php'); 
$output = ob_get_contents();
ob_end_clean();

And later on, you can do unset($output) when you don't need it anymore.

Flirtation answered 25/8, 2015 at 12:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.