实际应用中需要考虑更复杂的情况...我只是给一个思路,看代码吧..
getclassname.php
<?php
$file_info=file('class.php');
foreach ($file_info as $value)
{
$value=rtrim($value);
if (preg_match("/^class[\s]+[a-z]+[a-z0-9_]*/Uis",$value))
{
echo $value.'<br />';
}
}
?>
我用来测试的类
<?php
/****************WelCome To use*****************************
*Document Description:测试
*Author:SurfChen
*Contact:[email protected]
*Support:http://www.yubeinet.com
*Copyright,YuBeiNetWork.All Rights Reserved
*Powered By PHP:Hypertext Preprocessor && MySql
*===========================================================*/
class PhpClassicalClass()
{
function Construct()
{
$this->PHPer='surfchen';
}
}
?>
getclassname.php
<?php
$file_info=file('class.php');
foreach ($file_info as $value)
{
$value=rtrim($value);
if (preg_match("/^class[\s]+[a-z]+[a-z0-9_]*/Uis",$value))
{
echo $value.'<br />';
}
}
?>
我用来测试的类
<?php
/****************WelCome To use*****************************
*Document Description:测试
*Author:SurfChen
*Contact:[email protected]
*Support:http://www.yubeinet.com
*Copyright,YuBeiNetWork.All Rights Reserved
*Powered By PHP:Hypertext Preprocessor && MySql
*===========================================================*/
class PhpClassicalClass()
{
function Construct()
{
$this->PHPer='surfchen';
}
}
?>
你这是读取静态class文件分析获取class名称,并非运行时根据对象获取其类名。
如果用你这种方法,那我要去分析所有class源文件,把所有类名保存到集合,然后用get_class(obj)获取对象运行时的类名,再和上面类名集合中的每个类名的小写形式一一比较!个人感觉不妥欢迎大家提出更好的解决办法!
$DECLARED_CLASS = array( "PHPclass1", "TestClass", "AnotherCLASS");然后在判断时可以写个函数
function get_class_exactly( $obj )
{
global $DECLARED_CLASS;
$cn = get_class( $obj ); foreach( $DECLARED_CLASS as $v )
{
if ( $cn == strtolower( $v ) )
{
return $v;
}
}
retrun null;
}
是这样的,我想写一个通用的web service服务器,因为java客户端发出的请求xml中经常是封装的一些对象,因为java的类名大小写敏感,而php不敏感,因此我无法将java封装的对象同php中的类对应起来。to ice_berg16(寻梦的稻草人):
我要的是通用的方法,你这种方法和surfchen(冲浪)的方法本质上是一样的,是我想到过的,无法满足做一个通用的web service服务器的要求
(PHP 4 )get_class -- 返回对象的类名
描述
string get_class ( object obj)
返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。 注: get_class() 返回用户定义的类名的小写形式。在 PHP 扩展中定义的类则返回其原有的名字
我想写一个通用的web service服务器”用php写?如果不是,那与php有什么关系呢?
“因为java客户端发出的请求xml中经常是封装的一些对象”什么对象?java?那么该用java处理吧?用php模拟?
php可加载java驱动模块,此时php只是充当通信员。所谓类名大小写敏感与敏感并不是问题
GLOBALS $Class_Name_array;
$Class_Name_array=array();Class BaseClass{
get_class_name(){
GLOBALS $Class_Name_array;
$Class_Name_array__CLASS__
}
}
?>
get_class_name(){
GLOBALS $Class_Name_array;
$Class_Name_array[]=__CLASS__;
}
}
?>所有类都继承与这个基类,然后在没有类的构造器里面调用这个get_class_name()方法!
php5中是这样吗?和apache版本应该没有关系。如果php5真这样,倒是可以试一试。谢谢了!to 唠叨:
对,是用php做web service服务器,主要是利用apache做http服务器,用php来实现soap协议和wsdl标准的解析。这里和加载java模块没有关系,这是web service,是不同域名下不同应用程序之间的通信。to 西北狼:
你这样限制了类的书写,没有通用性