ReflectionClass
Waarvoor dient de class ReflectionClass ?
Ik kwam het in een class tegen onder deze vorm:
Code (php)
Ergens in een andere functie van deze class, kwam ik bijvoorbeeld volgende regel tegen:
Kan iemand voor mij het licht aansteken aub, want ik tast nog in het duister...
Gewijzigd op 01/01/1970 01:00:00 door Tom
Ik kan je wel uitleggen wat de regels betekenen, maar niet wat ReflectionClass precies doet. Daar hebben wij ook code voor nodig om dat te achterhalen.
Op de website http://sitten-polizei.de/php/reflection_api/docs/language.reflection.class.reflection_class.html staat: "The ReflectionClass class lets you reverse-engineer classes. To introspect a class, you will first have to create an instance of the ReflectionClass class. You can then call any of the above methods on this instance."
In de php manual is hierover echter weinig te vinden.
Niet vanaf de achterkant, dus de opbouw van de klasse, maar vanaf de voorkant, het resultaat van alle overervingen e.d. Zo kan een klasse makkelijker onderzocht worden voor bijv. gebruik, of het namaken ervan terwijl je dezelfde 'interface', toegangspunten, behoudt.
Op PHPfreakz.nl heb ik er een keertje iets over gelezen, misschien dat je er wat aan hebt.
class coreObject
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
abstract class coreObject
{
protected $me;
public function __construct()
{
$this->me = new ReflectionClass($this);
}
public function setFrom($data)
{
if (is_array($data) && count($data)) {
$valid = get_class_vars(get_class($this));
foreach ($valid as $var => $val) {
if (isset($data[$var])) {
$this->$var = $data[$var];
}
}
}
}
public function toArray()
{
$defaults = $this->me->getDefaultProperties();
$return = array();
foreach ($defaults as $var => $val) {
if ($this->$var instanceof coreObject) {
$return[$var] = $this->$var->toArray();
} else {
$return[$var] = $this->$var;
}
}
return $return;
}
public function __destruct()
{
}
}
?>
abstract class coreObject
{
protected $me;
public function __construct()
{
$this->me = new ReflectionClass($this);
}
public function setFrom($data)
{
if (is_array($data) && count($data)) {
$valid = get_class_vars(get_class($this));
foreach ($valid as $var => $val) {
if (isset($data[$var])) {
$this->$var = $data[$var];
}
}
}
}
public function toArray()
{
$defaults = $this->me->getDefaultProperties();
$return = array();
foreach ($defaults as $var => $val) {
if ($this->$var instanceof coreObject) {
$return[$var] = $this->$var->toArray();
} else {
$return[$var] = $this->$var;
}
}
return $return;
}
public function __destruct()
{
}
}
?>
class coreObjectDb extends coreObject
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
abstract class coreObjectDb extends coreObject
{
protected $db;
public function __construct()
{
parent::__construct();
static $connection = null;
if ($connection === null) {
$connection = DB::connect(CORE_DSN);
if (!PEAR::isError($connection)) {
$connection->setFetchMode(DB_FETCHMODE_ASSOC);
} else {
throw new Exception($connection->getMessage());
}
}
$this->db = $connection;
}
function __destruct()
{
parent::__destruct();
if (DB::isConnection($this->db)) {
$this->db->disconnect();
}
}
}
?>
abstract class coreObjectDb extends coreObject
{
protected $db;
public function __construct()
{
parent::__construct();
static $connection = null;
if ($connection === null) {
$connection = DB::connect(CORE_DSN);
if (!PEAR::isError($connection)) {
$connection->setFetchMode(DB_FETCHMODE_ASSOC);
} else {
throw new Exception($connection->getMessage());
}
}
$this->db = $connection;
}
function __destruct()
{
parent::__destruct();
if (DB::isConnection($this->db)) {
$this->db->disconnect();
}
}
}
?>
class coreObjectWeb extends coreObjectDb
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class coreModule extends coreObjectWeb
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
abstract class coreModule extends coreObjectWeb
{
public $presenter = 'smarty';
protected $data = array();
public $name;
public $tplFile;
public $moduleName = null;
public $pageTemplateFile = null;
public function __construct()
{
parent::__construct();
$this->name = $this->me->getName();
$parts = explode('_',$this->name);
$this->tplFile = array_pop($parts).'.tpl';
}
abstract public function __default();
protected function set($var,$val) {
$this->data[$var] = $val;
}
public function getData()
{
return $this->data;
}
public static function isValid($module)
{
return (is_object($module) &&
$module instanceof coreModule &&
$module instanceof coreAuth);
}
public function __destruct()
{
parent::__destruct();
}
}
?>
abstract class coreModule extends coreObjectWeb
{
public $presenter = 'smarty';
protected $data = array();
public $name;
public $tplFile;
public $moduleName = null;
public $pageTemplateFile = null;
public function __construct()
{
parent::__construct();
$this->name = $this->me->getName();
$parts = explode('_',$this->name);
$this->tplFile = array_pop($parts).'.tpl';
}
abstract public function __default();
protected function set($var,$val) {
$this->data[$var] = $val;
}
public function getData()
{
return $this->data;
}
public static function isValid($module)
{
return (is_object($module) &&
$module instanceof coreModule &&
$module instanceof coreAuth);
}
public function __destruct()
{
parent::__destruct();
}
}
?>
class coreAuth extends coreModule
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
abstract class coreAuth extends coreModule
{
function __construct()
{
parent::__construct();
}
abstract function authenticate();
function __destruct()
{
parent::__destruct();
}
}
?>
abstract class coreAuth extends coreModule
{
function __construct()
{
parent::__construct();
}
abstract function authenticate();
function __destruct()
{
parent::__destruct();
}
}
?>
Vervolgens zijn er uiteraard de classen die de authenticatie op zich nemen. Van die classen kan je dan verderbouwen om een module voor de website in elkaar te steken.
Nu vraag ik mij af wat het nut is van de 2 functies in de class coreObject, namelijk: toArray() en setFrom($data) !? Ze lijken verder nergens in een class gebruikt te worden, ook niet in de controller.
Gewijzigd op 01/01/1970 01:00:00 door Tom
Never mind... na lang zoeken op het web heb ik de auteur van het oorspronkelijke script gevonden (want dit is blijkbaar een aangepast script). Die heeft me uitgelegd waarvoor deze functies dienen.