Bonsoir, je viens de faire le tour des fonctionnalités de php5 (version
5.0.1). Il y a des choses que je n'ai pas trouvées. Ai-je bien cherché?
sont-elles impossibles à implémenter? pourquoi? ou le cas échéant, elles
sont prévues mais pas encore implémentées. Bref, si vous pouviez éclairer ma
lanterne. Merci.
(à quelques erreurs de syntaxe près..)
1) surcharge d'opérateur. exemple :
class dataStatus {
const OK = 1; // type énum
const NOT_OK = 2;
...
var $status;
...
function toString() {
switch ($this->status) {
case dataStatus::OK: return "OK"; break;
...
}
}
function operator == ($status) {
return ($this->status == $status);
}
}
Comme ça on pourrait faire des type énumérés "imprimables" à l'écran. Et
puis faire :
if (myType == dataStatus::OK) echo myType->toString();
Et plein d'autres applications encore... (relations d'ordre entre objets...)
2) Surcharge d'index
class list {
private $L = array();
public $name;
...
function operator[] ($i) {
return $this->L[$i];
}
}
PS : pourquoi pas une fonction __index() ?
Comme ça on pourrait faire :
if ($list->name == 'list1') $list[2] = 2;
3) Polymorphisme :
J'ai essayé ceci dans une classe :
class x {
function f(classe1 $obj) {
}...
}
ça a l'air de comprendre qd j'appelle $objx->f(obj1)
Mais qd je déclare à la suite :
function f(classe2 $obj) {
}
Je me fais engueler : cannot redefine function f.
Ca veut dire que le polymorphisme, c'est en cours mais pas encore
complètement implété?
4) try / catch / finally?
J'ai entendu dire que finally n'est pas implémenté?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit F
1) surcharge d'opérateur. exemple : function operator == ($status) { function operator[] ($i) { Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code carément illisible. Je rapelle que java (par exemple) n'implemente pas un tel "bouiboui" mais une fonction d'égalité nommée equals() et un accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça reviens au même mais c'est à mon avis plus lisible.
2) Surcharge d'index PS : pourquoi pas une fonction __index() ? Elle sort d'où celle là ?
3) Polymorphisme : Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
function f(classe1 $obj) { function f(classe2 $obj) { Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus lisible
function f($obj) { if ($obj instanceof classe2 ) { $this->fclasse1($obj); } elseif ($obj instanceof classe2 ) { $this->fclasse2($obj); } }
4) try / catch / finally? J'ai entendu dire que finally n'est pas implémenté? Effectivement, finaly n'est pas implementé
-- Benoit F.
1) surcharge d'opérateur. exemple :
function operator == ($status) {
function operator[] ($i) {
Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code
carément illisible. Je rapelle que java (par exemple) n'implemente pas
un tel "bouiboui" mais une fonction d'égalité nommée equals() et un
accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça
reviens au même mais c'est à mon avis plus lisible.
2) Surcharge d'index
PS : pourquoi pas une fonction __index() ?
Elle sort d'où celle là ?
3) Polymorphisme :
Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
function f(classe1 $obj) {
function f(classe2 $obj) {
Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus
lisible
function f($obj) {
if ($obj instanceof classe2 ) {
$this->fclasse1($obj);
} elseif ($obj instanceof classe2 ) {
$this->fclasse2($obj);
}
}
4) try / catch / finally?
J'ai entendu dire que finally n'est pas implémenté?
Effectivement, finaly n'est pas implementé
1) surcharge d'opérateur. exemple : function operator == ($status) { function operator[] ($i) { Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code carément illisible. Je rapelle que java (par exemple) n'implemente pas un tel "bouiboui" mais une fonction d'égalité nommée equals() et un accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça reviens au même mais c'est à mon avis plus lisible.
2) Surcharge d'index PS : pourquoi pas une fonction __index() ? Elle sort d'où celle là ?
3) Polymorphisme : Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
function f(classe1 $obj) { function f(classe2 $obj) { Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus lisible
function f($obj) { if ($obj instanceof classe2 ) { $this->fclasse1($obj); } elseif ($obj instanceof classe2 ) { $this->fclasse2($obj); } }
4) try / catch / finally? J'ai entendu dire que finally n'est pas implémenté? Effectivement, finaly n'est pas implementé
-- Benoit F.
NTH
1) surcharge d'opérateur. exemple : function operator == ($status) { function operator[] ($i) { Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code carément illisible. Je rapelle que java (par exemple) n'implemente pas un tel "bouiboui" mais une fonction d'égalité nommée equals() et un accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça reviens au même mais c'est à mon avis plus lisible. En C# ces 2 opérations sont possibles...
Je me répète mais : 1) c'est super sympa de pouvoir donner qq attributs en plus à un array : if ($my_list->name == 'list') return $my_list[$i] ; 1b) écrire 400 fois : $your_list.elementAt($i) = $my_list.elementAt($i); c'est pénible. C'est qd même plus sympa : $your_list[$i] = $my_list[$i]; Pour ces raisons, $my_list ne doit pas être un simple array, mais une classe. Avec simplement - par ex - une méthode __index($i) en plus (qui serait appelée si on fait $my_list[$i], voir plus bas). C'est pas compliqué non? 2) Qd à la redéfinition d'opérateurs, c'est connu... c'est sympa de pouvoir définir des relations d'ordre entre objets. if ($myobj > $yourobj), if ($myobj == $yourobj) $myobj = 3... Enfin les goûts et les couleurs, c'est perso...
2) Surcharge d'index PS : pourquoi pas une fonction __index() ? Elle sort d'où celle là ?
Je veux dire : si on fait :
class list { private $_list = array(); ... } $L = new list(); $a = $L[0]; la méthode __index($i) de $L serait appelée avec $i comme index (à l'image des méthodes comme __constructor, __destructor, __isset etc.)
3) Polymorphisme : Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
Oui désolé je ne connais pas le terme exact. J'ai manqué de précision sur ce
coup là...
function f(classe1 $obj) { function f(classe2 $obj) { Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus lisible
function f($obj) { if ($obj instanceof classe2 ) { $this->fclasse1($obj); } elseif ($obj instanceof classe2 ) { $this->fclasse2($obj); } } C'est encore plus crado... mieux vaut faire f1() et f2(). Ok on peut s'en
passer sinon.
4) try / catch / finally? J'ai entendu dire que finally n'est pas implémenté? Effectivement, finaly n'est pas implementé
No comment, on est bien d'accord. Pourquoi?
Merci, ciao amigo.
1) surcharge d'opérateur. exemple :
function operator == ($status) {
function operator[] ($i) {
Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code
carément illisible. Je rapelle que java (par exemple) n'implemente pas
un tel "bouiboui" mais une fonction d'égalité nommée equals() et un
accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça
reviens au même mais c'est à mon avis plus lisible.
En C# ces 2 opérations sont possibles...
Je me répète mais :
1) c'est super sympa de pouvoir donner qq attributs en plus à un array :
if ($my_list->name == 'list') return $my_list[$i] ;
1b) écrire 400 fois :
$your_list.elementAt($i) = $my_list.elementAt($i);
c'est pénible. C'est qd même plus sympa :
$your_list[$i] = $my_list[$i];
Pour ces raisons, $my_list ne doit pas être un simple array, mais une
classe. Avec simplement - par ex - une méthode __index($i) en plus (qui
serait appelée si on fait $my_list[$i], voir plus bas). C'est pas compliqué
non?
2) Qd à la redéfinition d'opérateurs, c'est connu... c'est sympa de pouvoir
définir des relations d'ordre entre objets.
if ($myobj > $yourobj), if ($myobj == $yourobj) $myobj = 3...
Enfin les goûts et les couleurs, c'est perso...
2) Surcharge d'index
PS : pourquoi pas une fonction __index() ?
Elle sort d'où celle là ?
Je veux dire : si on fait :
class list {
private $_list = array();
...
}
$L = new list();
$a = $L[0];
la méthode __index($i) de $L serait appelée avec $i comme index
(à l'image des méthodes comme __constructor, __destructor, __isset etc.)
3) Polymorphisme :
Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
Oui désolé je ne connais pas le terme exact. J'ai manqué de précision sur ce
coup là...
function f(classe1 $obj) {
function f(classe2 $obj) {
Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus
lisible
function f($obj) {
if ($obj instanceof classe2 ) {
$this->fclasse1($obj);
} elseif ($obj instanceof classe2 ) {
$this->fclasse2($obj);
}
}
C'est encore plus crado... mieux vaut faire f1() et f2(). Ok on peut s'en
passer sinon.
4) try / catch / finally?
J'ai entendu dire que finally n'est pas implémenté?
Effectivement, finaly n'est pas implementé
1) surcharge d'opérateur. exemple : function operator == ($status) { function operator[] ($i) { Impossible d'appeller de telle opération. Je ne connais que C++ pour
faire de pareilles choses. Ce qui aurait tendance à rendre le code carément illisible. Je rapelle que java (par exemple) n'implemente pas un tel "bouiboui" mais une fonction d'égalité nommée equals() et un accesseur vers l'element i nommé elementAt() . Il suffit de s'adapter ça reviens au même mais c'est à mon avis plus lisible. En C# ces 2 opérations sont possibles...
Je me répète mais : 1) c'est super sympa de pouvoir donner qq attributs en plus à un array : if ($my_list->name == 'list') return $my_list[$i] ; 1b) écrire 400 fois : $your_list.elementAt($i) = $my_list.elementAt($i); c'est pénible. C'est qd même plus sympa : $your_list[$i] = $my_list[$i]; Pour ces raisons, $my_list ne doit pas être un simple array, mais une classe. Avec simplement - par ex - une méthode __index($i) en plus (qui serait appelée si on fait $my_list[$i], voir plus bas). C'est pas compliqué non? 2) Qd à la redéfinition d'opérateurs, c'est connu... c'est sympa de pouvoir définir des relations d'ordre entre objets. if ($myobj > $yourobj), if ($myobj == $yourobj) $myobj = 3... Enfin les goûts et les couleurs, c'est perso...
2) Surcharge d'index PS : pourquoi pas une fonction __index() ? Elle sort d'où celle là ?
Je veux dire : si on fait :
class list { private $_list = array(); ... } $L = new list(); $a = $L[0]; la méthode __index($i) de $L serait appelée avec $i comme index (à l'image des méthodes comme __constructor, __destructor, __isset etc.)
3) Polymorphisme : Ce n'est pas ça du polymorphisme (enfin d'aprés moi)
Oui désolé je ne connais pas le terme exact. J'ai manqué de précision sur ce
coup là...
function f(classe1 $obj) { function f(classe2 $obj) { Toujours impossible, à cause du typage dit "faible" de php. Peut être
dans les prochaines versions mais j'en doute. Om y a moyen de faire plus lisible
function f($obj) { if ($obj instanceof classe2 ) { $this->fclasse1($obj); } elseif ($obj instanceof classe2 ) { $this->fclasse2($obj); } } C'est encore plus crado... mieux vaut faire f1() et f2(). Ok on peut s'en
passer sinon.
4) try / catch / finally? J'ai entendu dire que finally n'est pas implémenté? Effectivement, finaly n'est pas implementé
$obj->nimportequi = nimportequoi; dans ce cas, __set($nimportequi, $nimportequoi) serait appelée Moi ce que je veux c'est : $obj = 3 une autre espèce de __set($valeur) serait appelée et je ferai $this->ma_valeur = $valeur;
function operator[] ($i) { return $this->L[$i]; } voir Iterator.
Ca ne répond pas à ma question à savoir écrire des [] avec un objet :
$obj->nimportequi = nimportequoi;
dans ce cas, __set($nimportequi, $nimportequoi) serait appelée
Moi ce que je veux c'est :
$obj = 3
une autre espèce de __set($valeur) serait appelée et je ferai
$this->ma_valeur = $valeur;
function operator[] ($i) {
return $this->L[$i];
}
voir Iterator.
Ca ne répond pas à ma question à savoir écrire des [] avec un objet :
$obj->nimportequi = nimportequoi; dans ce cas, __set($nimportequi, $nimportequoi) serait appelée Moi ce que je veux c'est : $obj = 3 une autre espèce de __set($valeur) serait appelée et je ferai $this->ma_valeur = $valeur;
function operator[] ($i) { return $this->L[$i]; } voir Iterator.
Ca ne répond pas à ma question à savoir écrire des [] avec un objet :