4
回答
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方法后再输出却什么都没有输出。小弟新手,求各位大牛指教原因。不胜感激

PHP
举报
vir_right
发帖于6年前 4回/2K+阅
共有4个答案 最后回答: 6年前

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

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现在越来越不推荐使用全局变量了..

还是用面向对象比较好

--- 共有 1 条评论 ---
vir_right十分感谢 5年前 回复

你的逻辑有问题.

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

--- 共有 1 条评论 ---
vir_right那该如何实现类似于include这种功能呢?谢谢! 6年前 回复
作用域没搞清楚啊。另外自动加载推荐使用spl_autoload_register(),这个可以注册多个自动加载方法。
顶部