php 全局导致非对象错误,除非从 $GLOBALS 传输
php global causing non-object error unless transfered from $GLOBALS
我有一个包含 class 的文件。当我需要访问 class 时,我将 include
这个文件。我想在 class 存在的文件中声明 class,这样我只需要声明 class 一次,并且只需要 include
文件即可使用class.
这有效。
<?php
$GLOBALS['foo_model'] = new foo_model;
$foo_model = $GLOBALS['foo_model'];
global $foo_model;
Class foo_model
{
function foo_function() {
// ect
}
}
这不起作用
<?php
$foo_model = new foo_model;
global $foo_model;
Class foo_model
{
function foo_function() {
// ect
}
}
尝试使用class时会导致错误。
Call to a member function foo_function() on a non-object
为什么我要从$GLOBALS
开始,然后转成正则变量再应用global
。我认为 $GLOBALS
和 global
只是语法上的不同。 $GLOBALS
在这里有什么不同?
此外,编写包含 class 的文件的最佳方法是什么,这样我就可以 include
文件,并使用 class,而无需声明包含文件后 class,但不使用 $GLOBALS
?我的第一个代码片段是完成此任务的最佳方法吗?
不要这样做,这是非常糟糕的设计。尝试使用特征。
但我看到您正在尝试做的是创建 class 文件并在不包含它的情况下加载它。这就是 autoloader class 的概念。
看看这个:http://php.net/manual/en/function.autoload.php
记住:全局变量总是有问题的,尽可能避免使用它们。
我有一个包含 class 的文件。当我需要访问 class 时,我将 include
这个文件。我想在 class 存在的文件中声明 class,这样我只需要声明 class 一次,并且只需要 include
文件即可使用class.
这有效。
<?php
$GLOBALS['foo_model'] = new foo_model;
$foo_model = $GLOBALS['foo_model'];
global $foo_model;
Class foo_model
{
function foo_function() {
// ect
}
}
这不起作用
<?php
$foo_model = new foo_model;
global $foo_model;
Class foo_model
{
function foo_function() {
// ect
}
}
尝试使用class时会导致错误。
Call to a member function foo_function() on a non-object
为什么我要从$GLOBALS
开始,然后转成正则变量再应用global
。我认为 $GLOBALS
和 global
只是语法上的不同。 $GLOBALS
在这里有什么不同?
此外,编写包含 class 的文件的最佳方法是什么,这样我就可以 include
文件,并使用 class,而无需声明包含文件后 class,但不使用 $GLOBALS
?我的第一个代码片段是完成此任务的最佳方法吗?
不要这样做,这是非常糟糕的设计。尝试使用特征。
但我看到您正在尝试做的是创建 class 文件并在不包含它的情况下加载它。这就是 autoloader class 的概念。 看看这个:http://php.net/manual/en/function.autoload.php
记住:全局变量总是有问题的,尽可能避免使用它们。