php 文件定义类,php@function:根据单独定义的类文件获取相关类信息

/**

* 根据单独定义的类文件获取相关类信息

* @param string $path_file 文件绝对路径

* @return array

*/

function getClassFromFile(string $path_file): array

{

if (!file_exists($path_file)) return [];

// 获取文件内容

$contents = file_get_contents($path_file);

$namespace = $classname = $extends = "";

$implements = [];

$is_namespace = $is_classname = $is_extends = $is_implements = false;

foreach (token_get_all($contents) as $token)

{

if (is_array($token))

{

if ($token[0] == T_NAMESPACE) $is_namespace = true;

if ($token[0] == T_CLASS) $is_classname = true;

if ($token[0] == T_EXTENDS) $is_extends = true;

if ($token[0] == T_IMPLEMENTS) $is_implements = true;

}

if ($is_namespace === true)

{

// 如果$token[0]是字符串或分隔符

if (is_array($token) && in_array($token[0], [T_STRING, T_NS_SEPARATOR]))

$namespace .= $token[1];

else if ($token === ';') // 如果是分号则结束

$is_namespace = false;

}

if ($is_classname === true)

{

// 如果$token[0]是字符串

if (is_array($token) && $token[0] == T_STRING)

{

$classname = $token[1];

$is_classname = false;

}

}

if ($is_extends === true)

{

if (is_array($token) && $token[0] == T_STRING)

{

$extends = $token[1];

$is_extends = false;

}

}

if ($is_implements === true)

{

if (is_array($token) && $token[0] == T_STRING)

$implements[] = $token[1];

else if ($token === '{')

break; // 结束

}

}

return [

'class' => ($namespace ? ($namespace . '\\' . $classname) : $classname),

'namespace' => $namespace,

'classname' => $classname,

'extends' => $extends,

'implements' => $implements

];

}

各位道友,还有没有更好的方法呢? 我想获得继承某个接口的所有类!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值