fork download
  1. <?php
  2.  
  3. class A
  4. {
  5. protected static $deps = array('A.default.js', 'A.tablet.js');
  6. public function getDependencies($class)
  7. {
  8. $deps = array();
  9.  
  10. $parent = new ReflectionClass($this);
  11.  
  12. do
  13. {
  14. // ReflectionClass::getStaticPropertyValue() always throws ReflectionException with
  15. // message "Class [class] does not have a property named deps"
  16. // So I'm using ReflectionClass::getStaticProperties()
  17.  
  18. $staticProps = $parent->getStaticProperties();
  19. $deps = array_merge($deps, $staticProps['deps']);
  20. }
  21. while ($parent=$parent->getParentClass());
  22.  
  23. return $deps;
  24. }
  25. }
  26. class B extends A
  27. {
  28. protected static $deps = array('B.default.js');
  29. }
  30.  
  31. class C extends B
  32. {
  33. protected static $deps = array('C.default.js');
  34. }
  35.  
  36. $obj = new C();
  37. var_dump( $obj->getDependencies($obj) );
Success #stdin #stdout 0.02s 13112KB
stdin
Standard input is empty
stdout
array(4) {
  [0]=>
  string(12) "C.default.js"
  [1]=>
  string(12) "B.default.js"
  [2]=>
  string(12) "A.default.js"
  [3]=>
  string(11) "A.tablet.js"
}