J'ai rencontré un problème donc car je souhaite créer des classes à l'image du langage Java
Voici donc les classes et le code que j'ai réalisé :
object.class.php
singleton.class.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 <?php /** * Object * */ class Object { function __construct() { } /** * Return an array of class' properties * @access public * @param string $className optional * @return array */ final static public function getProperties( $className=null ) { $className = $className == null ? self::getName() : $className; $array = get_class_vars( $className ); $tmp = array(); while(list($name, $notUsed) = each($array)) { $tmp[] = $name; } return $tmp; } /** * Return an array of class' methods * @access public * @param string/null $classname * @return array */ final static public function getMethods( $className=null ) { $className = $className == null ? self::getName() : $className; $array = get_class_methods( $className ); return $array; } /** * Return the class' name * @access public * @return string */ static public function getName() { return __CLASS__; } /** * Assign a value to a property * @access public * @param string/array $name * @param mixed $value */ final public function set( $name, $value=null ) { if(is_array($name)) { $this->setFromArray($name); } else { if(property_exists($this, $name)) { $this->$name = $value; } else { throw new Exception('Property doesn\'t exist(' . $name . ')'); } } } /** * Return a property's value * @access public * @param string $name * @return mixed */ final public function get( $name ) { $return = false; if(property_exists($this, $name)) { $return = $this->$name; } else { throw new Exception('Property doesn\'t exist(' . $name . ')'); } return $return; } /** * Assign a value to several properties from an array * @access public * @param array $array */ final public function setFromArray( $array ) { if(is_array($array)) { while(list($name, $value) = each($array)) { try { $this->set($name, $value); } catch(Exception $e) { throw new Exception($e->getMessage()); } } } else { throw new Exception('Wrong usage of setFromArray($array)'); } } /** * Initialize an object * @access public */ final public function reset() { $array = get_class_vars($this->getName()); try { $this->setFromArray( $array ); } catch(Exception $e) { throw new Exception($e->getMessage()); } } } ?>
site.class.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58 <?php /** * Singleton * */ class Singleton extends Object { /** * Instance of Singleton * @var resource * @access public */ static public $instance = null; function __construct(){ try { $this->reset(); } catch(Exception $e) { throw new Exception($e->getMessage()); } } /** * Return the class' name * @access public * @return string */ static public function getName() { return __CLASS__; } /** * Return the instance of Class * @access public * @return resource */ static public function getInstance() { $className = self::getName(); try { self::$instance = self::$instance == null ? new $className() : self::$instance; } catch(Exception $e) { throw new Exception($e->getMessage()); } return self::$instance; } } ?>
le script
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54 <?php /** * Site * */ class Site extends Singleton { public $address = null; public $name = null; private $path = null; function __construct(){ try { parent::__construct(); $this->reset(); $this->setPath(); } catch(Exception $e) { //echo $e->getMessage(); throw new Exception($e->getMessage()); } } /** * Return the class' name * @access public * @return string */ static public function getName() { return __CLASS__; } /** * Set the path property * @access private */ private function setPath() { $value = dirname(__FILE__); try { $this->set('path', $value); } catch(Exception $e) { throw new Exception($e->getMessage()); } } } ?>
Pour l'historique, j'ai surchargé getName() car quelquesoit la classe, le script me renvoyé toujours Object
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 try { $site = Site::getInstance(); $site->setFromArray( array("address" => "http://localhost/", "name" => "Titre du site") ); include_once("templates/header.php"); //var_dump(getClasses()); //var_dump($site); include_once("templates/footer.php"); } catch(Exception $e) { //throw new Exception($e->getMessage()); echo $e->getMessage(); }
Ensuite, j'ai du ajouté la fonction reset() dans le constructeur de chaque classe, fille de Object ; je rencontrais le même problème....
Et là, je suis paumé car l'exception Property doesn't exist(instance) est levée
Dites moi où je fais fausse route
Merci par avance
Partager