Php 禁止从全局范围访问特定变量

Php 禁止从全局范围访问特定变量,php,oop,global-variables,php-5.3,Php,Oop,Global Variables,Php 5.3,有没有办法禁止从全局范围中选取变量 比如: #index.php $forbidden = 'you should not be able to access me outside this scope'; // maybe invoke a function or namespaces? require 'stuff.php'; echo new stuff(); #stuff.php class stuff { public function __toString() {

有没有办法禁止从全局范围中选取变量

比如:

#index.php
$forbidden = 'you should not be able to access me outside this scope'; // maybe invoke a function or namespaces?
require 'stuff.php';
echo new stuff();

#stuff.php
class stuff
{
    public function __toString()
    {
        global $forbidden; // to result in an error or something?
        /*
            just a random example, but yes, any way
            to somehow make a variable not global?
        */
        return 'I am forbidden';
    }
}
我不知道这是否可能,但无论如何,我只对OOP时尚感兴趣

原因? 禁止将特定类实例化为变量,然后从全局范围中取出以重用其函数。使类完全“私有”,有点像完成所有自动化的主类


希望我已经说清楚了。

我能想到的唯一办法就是“伪造”全球范围

//index.php
function scope() {
    require 'actual.php';
}
scope();
现在,将代码放入actual.php看起来像“普通”代码,但实际上它在函数范围内。显然,您现在不能在actual.php中声明函数或类,但除此之外,它的行为是相同的,只是声明的任何变量都将在函数的作用域而不是全局作用域中


但我真的不会这么做。如果有人做了像环球这样愚蠢的事,用棍子打通常是有效的;)

我认为,如果不使用非常昂贵的
debug\u backtrace()
,就没有办法做到这一点。这听起来相当深奥——您是否有特定的理由禁止在代码级别执行此操作?而不仅仅是将其定义为编码规则?如果有一个类自动创建页面例程。比如,1)查看请求是否有效,2)获取所有需要的内容,3)自动呈现所有内容。仅允许使用库和插件修改应用程序,这些库和插件不能全局访问此变量/类以启动循环。我可以不将其定义为变量,但应该有一种方法让第三方开发人员通过调试/分析预主类执行来强制执行请求。(简而言之)总有一些人不遵守规则,或者不理解文档,或者只是想做实验。但有趣的想法……我喜欢这个答案。首先不要污染全球空间。:)@汤姆:如果你害怕你的同事弄坏东西——不管你做什么,他们都能弄坏东西。不是我害怕别人弄坏东西,而是为了保持代码整洁。我敢打赌,70%的开发人员使用的框架是错误的。比如说,Symfony。。。他们制作了框架,记录了它等等,一个认为自己是专业人士的随机家伙,避免记录,使用Symfony作为“扩展”,以自己的方式编写应用程序。这个应用程序可以工作,但最终它看起来并不需要Symfony,它只需要一个包含Symfony某些功能的PHP扩展。那么,正如Jani所建议的:如果你想保持代码干净,就不要污染全局范围。