我一直在从头开始创建少量的库/类.我来自codeigniter背景,我正在尝试创建一些具有类似功能的库.我一直在遇到有关对象的问题.
是以某种方式创建超级对象的最好方法吗?我的主要问题是我创建了一个视图对象,并运行一个名为load的函数,如下所示:
class View {
public function __construct() {
}
public function load($file = NULL, $data = array()) {
if($file) {
$file .= '.php';
if(file_exists($file)) {
// Extract variables BEFORE including the file
extract($data);
include $file;
return TRUE;
} else {
echo 'View not found';
return FALSE;
}
} else {
return FALSE;
}
}
}
然后在我的php文件中,我在顶部包含’libraries.php’;看起来像:
include 'database.php';
include 'view.php';
include 'input.php';
include 'form.php';
$config = array(
'host' => 'localhost',
'username' => 'username',
'password' => 'password',
'database' => 'database'
);
$database = new Database($config);
$view = new View();
$input = new Input();
$form = new Form();
从我包含库的文件中,我可以编写类似$form-> value(‘name’);没有错误.但是,如果我做这样的事情:
$view-> load(‘folder / index’,array(‘var_name’=>’var_value’));然后从文件夹/ index.php文件中我可以访问$var_name就好了,但不是$form-> value(‘name’);.我得到错误,如调用非对象的成员函数值()…
我的问题是如何以可重用的方式组织我的库和类.我不想使用前端加载器(index.php文件,所有内容都先运行).这可能是我编写课程的方式的一个问题,但我想这是一个关于事物所在位置等问题的更大问题.
解决方法:
将库/类文件放在公共目录中.就像是:
www
|_includes
| |_classes
| | |_view.php
| |_config
| |_database.php
|_other_folder
|_index.php
然后,您可以将.htaccess文件中的公共包含路径设置为此“包含”目录:
php_value include_path .:/path/to/www/includes
那么other_folder / index.php文件只需要:
require_once('config/database.php');
require_once('classes/view.php');