php - 在特征中查找类属性,但仅查找类的属性
问题描述
我试图隔离源自class
包含 的属性的属性trait
。IE应该创建一个包含所有属性名称的trait
数组,class
而不是在.trait
trait
我曾尝试过extending
上课。我尝试过使用PHP 中的static
方法:是否可以从 trait 静态方法中使用 trait 获取类的名称?我无处可去。
我将在 中使用已知属性,trait
并简单地将它们从属性数组中删除(因为我知道它们的名称)。这是一个相当丑陋的解决方案,但它会起作用。
有人看到更好的方法吗?
trait FooTrait
{
public $classVariables;
public function classAttributes()
{
$callingClass = get_class($this);
$rawAttributes= $this->$classVariables = get_class_vars($callingClass);
var_dump($rawAttributes);
var_dump($callingClass);
return $rawAttributes;
}
public function info()
{
var_dump($this->classVariables);
}
// manipulate $this -> classVaribales to do generic database operations
}
class Mine
{
use FooTrait;
protected $attrib1;
protected $attrib2;
protected $attrib3;
}
$needed = new Mine;
$needed->classAttributes();
$needed->info();
OUTPUT 是属性 1,2,3 和 bar。如何获得属性 1、2、3?
编辑:我编辑了几个属性以尝试使其更易于理解。
解决方案
trait
更新:如果属性是protected
or ,这不起作用private
。由于不应直接引用特征......有点破坏交易。
我能找到获得trait
没有调用属性的唯一方法class
是将其命名为文字。但是限制了scope
and 所以看不到private
andprotected
属性。
我现在放弃了,将使用trait
. 不是一个大问题,只是非常不雅。
class ThisClass {
use ThisTrait;
public $classAttribute1 = 3;
public $classAttribute2 = 3;
public $classAttribute3 = 3;
}
trait ThisTrait {
public $traitTrait1 = 3;
public $traitTrait2 = 3;
public $traitTrait3 = 3;
public function classAttributes (){
$traitAttributes = get_class_vars("ThisTrait"); //NB String not variable
$traitAttributes = array_keys ($traitAttributes);
$className = get_class($this); //NB Var = gets class where this called
$classAttributes = get_class_vars($className);
$classAttributes = array_keys($classAttributes);
$classOnly = array_diff($classAttributes, $traitAttributes);
return $classOnly;
}
}
$thisClass = new ThisClass ();
$result = $thisClass -> classAttributes();
var_dump($result);
=========================================
array (size=3)
0 => string 'classAttribute1' (length=15)
1 => string 'classAttribute2' (length=15)
2 => string 'classAttribute3' (length=15)
推荐阅读
- http - 从 LoadBalancer 中移除后很久才接收 webRequests 的服务器
- c++ - 如何实现跟随定时器?
- php - Composer 在尝试更新 sentry-laravel 包时不返回任何更新
- java - 使用 lambda 函数调用 rest api 的 Junit 测试用例
- java - 为什么实例化 JavaFX 场景控件会破坏布局
- bash - 使用 Git Bash 在远程服务器上通过 SSH 执行 sudo 命令?
- java - 我可以观看文件/文件夹重命名事件吗?
- java - 是否可以将函数作为枚举构造函数参数?
- docusignapi - DocuSign REST Api 字符串字段限制
- javascript - PHP 数组转换成 JavaScript 数组