php自定义方法问题

vir_right 发布于 2012/04/22 11:44
阅读 2K+
收藏 0
PHP
comm.inc.php
<?php
define('SYSTEM_PATH',str_replace("\\",'/', dirname(__FILE__)));
define('COR_PATH',SYSTEM_PATH.'/Cor');
define('LIB_PATH',SYSTEM_PATH.'/Lib');
define('CLASS_PATH',SYSTEM_PATH.'/class');

function __autoload($class_name){
	if(class_exists($class_name)){
		return TRUE;
	}
	$libclassfile=$class_name.'.class.php';
	if(is_file(LIB_PATH.'/'.$libclassfile)){
		require_once LIB_PATH.'/'.$libclassfile;
	}else{
		echo '<pre>';
		echo $class_name.'类找不到';
		echo '</pre>';
		exit();
	}
}
function load_class($class_name){
	$file=$class_name.'.php';
	if(is_file(CLASS_PATH.'/'.$file)){
		include CLASS_PATH.'/'.$file;
	}else{
		echo '<pre>';
		echo $file.'文件未找到!';
		echo '</pre>';
	}
}

function dump($socu){
	echo '<pre>';
	var_dump($socu);
	echo '</pre>';
}

在另一个文件index.php中这么写:

<?php
include("./comm.inc.php");
load_class('test');
echo $a;
?>

test.php文件:

<?php
$a="test";

index.php 和comm.inc.php是在根目录下,test.php在class文件中。我在index.php中用include

方法包含后 echo $a;输出test;但当我用我自定义的load_class方法后再输出却什么都没有输出。小弟新手,求各位大牛指教原因。不胜感激

加载中
0
酒逍遥
酒逍遥

修改了一下 不知道能否满足你的需求

comm.inc.php

<?php
define('SYSTEM_PATH',str_replace("\\",'/', dirname(__FILE__)));
define('COR_PATH',SYSTEM_PATH.'/Cor');
define('LIB_PATH',SYSTEM_PATH.'/Lib');
define('CLASS_PATH',SYSTEM_PATH.'/class');

function __autoload($class_name){
	if(class_exists($class_name)){
		return TRUE;
	}
	$libclassfile=$class_name.'.class.php';
	if(is_file(LIB_PATH.'/'.$libclassfile)){
		require_once LIB_PATH.'/'.$libclassfile;
	}else{
		echo '<pre>';
		echo $class_name.'类找不到';
		echo '</pre>';
		exit();
	}
}
function load_class($class_name){
	$file=$class_name.'.php';
	if(is_file(CLASS_PATH.'/'.$file)){
		include CLASS_PATH.'/'.$file;
		return (object)get_defined_vars();
		
			}else{
		echo '<pre>';
		echo $file.'文件未找到!';
		echo '</pre>';
	}
}

function dump($socu){
	echo '<pre>';
	var_dump($socu);
	echo '</pre>';
}
?>

index.php

<?php
include("./comm.inc.php");
$class=load_class('test');
echo $class->a;
?>

test.php文件:

?php
$a="test";
?>

运行index.pp 输出 test

你 include文件时是在函数内部include所以被include的文件里的变量生存期只在函数内部有效.

我的方案 就是 在函数内部include之后 获取所有定义的变量,然后把这些变量转化为类的属性,并返回该类。

当然用全局变量也可以解决这个问题....不过php现在越来越不推荐使用全局变量了..

还是用面向对象比较好

vir_right
vir_right
十分感谢
0
wx---羊毛联盟
wx---羊毛联盟

你的逻辑有问题.

在函数里加载一个文件,这个文件的变量应该是这是个函数的变量,不会变成公共变量的.

vir_right
vir_right
那该如何实现类似于include这种功能呢?谢谢!
0
w
weidouble
补充一点,你应该建一个类,用类进行引用
0
Liuxd
Liuxd
作用域没搞清楚啊。另外自动加载推荐使用spl_autoload_register(),这个可以注册多个自动加载方法。
返回顶部
顶部