对于我目前的项目,我决定为一些常用功能创建一个库。
Ex:Login_check,get_current_user等。
凭借我的小知识,我创造了一个简单的但不幸的是它无法正常工作。
我的图书馆:
FileName:Pro.php
位于application/libraries
class Pro{
public function __construct()
{
parent::_construct();
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->load->database();
}
function show_hello_world()
{
$text = "Hello World";
return $text;
}
}
?>
我试图将它加载到我的控制器上:
<?php
class Admin extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->database();
$this->load->library(array('session'));
$this->load->library("Pro");
}
function index()
{
echo($this->Pro->show_hello_world());
}
}
?>
我看不到任何错误......但我得到一个空白页。
我怎么了?
谢谢。
编辑:我收到了这个错误:
Call to a member function show_hello_world() on a non-object in C:\wamp\www\Project\application\controllers\admin.php on line 13
答案 0 :(得分:15)
我注意到一件事:从库构造函数中删除parent::__construct()
,因为它没有扩展任何东西,因此没有父级可以调用。
此外,通过在index.php中将环境设置为“development”来启用错误报告,您可能还希望在config / config.php中将日志记录阈值提高到4,以便记录错误。
试试这个简单的测试用例:
应用程序/库中的Pro.php文件:
class Pro {
function show_hello_world()
{
return 'Hello World';
}
}
应用程序/控制器中的控制器admin.php
class Admin extends CI_Controller
{
function index()
{
$this->load->library('pro');
echo $this->pro->show_hello_world();
}
}
答案 1 :(得分:2)
虽然您的类名大写,但在加载和使用库时对库的所有引用都应该是小写的。你也不需要像其他评论者那样提到构造函数。
所以代替:
echo($this->Pro->show_hello_world());
你应该:
echo($this->pro->show_hello_world());
答案 2 :(得分:1)
我更喜欢标准的php自动加载器方法,这样你根本不需要改变你的类,你可以使用你的标准类而无需修改
比如说你的班级是班级&#39; Custom_Example_Example2&#39;并存储在库中 在子文件夹中,您可以在主索引中添加此自动加载器.php
确保将其添加到定义的APPPATH常量
之下//autoload custom classes
function __autoload($className) {
if (strlen(strstr($className, 'Custom_')) > 0 ||
strlen(strstr($className, 'Other1_')) > 0 ||
strlen(strstr($className, 'Other2_')) > 0) {
$exp = explode('_', $className);
$file = APPPATH.'libraries';
if(!empty($exp)) {
foreach($exp as $segment) {
$file .= '/'.strtolower($segment);
}
}
$file .= '.php';
require_once $file;
//debug
//echo $file.'<br />';
}
}
这将查找匹配&#39;自定义_&#39;字首 并在这种情况下将它们重新路由到相对位置
您只需要定义基本前缀而不是子文件夹/类 这些代码将自动检测到
APPPATH.'libraries/custom/example/example2.php'
您可以在控制器中以标准的php方式调用它
$class = new Custom_Example_Example2;
或
$class = new custom_example_example2();
您可以根据自己的喜好修改脚本,目前它希望库中的所有文件夹和文件名都是小写的,但您可以删除strtolower()函数以允许多个套管。
您可以通过取消注释此行并刷新页面来更改一次要回显来测试输出,确保在控制器或模型中有一个init / test类来运行测试
echo $file.'<br />';
由于 丹尼尔
答案 3 :(得分:0)
在Pro.php中
class Pro{
protected $CI;
public function __construct() {
$this->CI = & get_instance();
}
public function showHelloWorld(){
return "Hello World";
}
}
在您的控制器中
class Staff extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->database();
$this->load->helper(array('url_helper', 'url'));
$this->load->library("pro");
}
public function index() {
echo $this->pro->showHelloWorld();die;
}
}
只需执行以下操作即可访问codeignitor中的自定义库。