所有函数的变量都是全局变量

时间:2010-05-30 21:02:15

标签: php function global

是否有可能使所有函数的变量全局化,而不必像global $a, $b, $c...那样输入所有函数?

4 个答案:

答案 0 :(得分:4)

尝试在应用程序中创建一个静态对象并将变量分配给该范围,如下所示!

<?php
/*
    * Core class thats used to store objects of ease of access within difficult scopes
*/
class Registry
{
    /*
        * @var array Holds all the main objects in an array a greater scope access
        * @access private
    */
    private static $objects = array();

    /**
        * Add's an object into the the global
        * @param string $name
        * @param string $object
        * @return bool
    */
    public static function add($name,$object)
    {
        self::$objects[$name] = $object;
        return true;
    }

    /*
        * Get's an object out of the registry
        * @param string $name
        * @return object on success, false on failure
    */  
    public static function get($name)
    {   if(isset(self::$objects[$name]))
        {
            return self::$objects[$name];
        }
        return false;
    }

    /**
        * Removes an object out of Registry (Hardly used)
        * @param string $name
        * @return bool
    */
    static function remove($name)
    {
        unset(self::$objects[$name]);
        return true;
    }

    /**
        * Checks if an object is stored within the registry
        * @param string $name
        * @return bool
    */
    static function is_set($name)
    {
        return isset(self::$objects[$name]);
    }
}
?>

考虑到此文件是包含的第一个文件之一,您可以将任何对象/数组/变量/资源/等设置到此范围内。

因此,假设您刚刚建立了数据库连接,这是您使用它的方法

...
$database = new PDO($dns);

Registry::add('Database',$database);

$DBConfig = Registry::get('Database')->query('SELECT * FROM config_table')->fetchAll(PDO::FETCH_CLASS);
Registry::add('Config',$DBConfig);

您的脚本中没有任何其他内容可以添加或检索项目。

Registry::get('ITEM_NEEDED');

这适用于方法函数等。

完美的例子

function insertItem($keys,$values)
{
   Registry::get('Database')->query('INSERT INTO items ('.implode(',',$keys).') VALUES ('.implode(',',$values).')');
}

希望有所帮助

答案 1 :(得分:3)

没有。无论如何这都是可怕的事情。

答案 2 :(得分:2)

您可以将它们作为参数传递,然后您将不需要global关键字:

function(&$a, &$b, &$c)
{
 // your code........
}

答案 3 :(得分:1)

您始终可以使用$GLOBALS["var"]代替$var。当然,如果你需要这个,你最有可能做错了。