include et class : petite question [PHP] - PHP - Programmation
Marsh Posté le 06-01-2004 à 21:30:23
tu utilises la classe A dans B ? tu veux dire que tu utilises un objet de type classe A non ?
pcq ce que tu dis fonctionne...
index.php
Code :
|
B.Class.php
Code :
|
et ça aussi ça fct.
C.class.php
Code :
|
Marsh Posté le 06-01-2004 à 21:36:11
Citation : tu utilises la classe A dans B ? tu veux dire que tu utilises un objet de type classe A non ? |
oui c'est ca.
En reprenant ton exemple :
B.Class.php
Code :
|
Je peu donc fait ca ??
Marsh Posté le 06-01-2004 à 21:40:05
oui, mais il faut évidemment que ton objet $A existe dans ta classe B
Code :
|
Marsh Posté le 06-01-2004 à 21:50:43
ah ok, voila ce que j'avais pas mis.
Donc si dans ma page index.php j'ai :
Code :
|
dans B.class.php il me suffit d'avoir :
<?
class B {
var $y;
var $A;
function test(){
$this->A->unefonctiondeA($y)
}
}
?>
C'est ca ?
Ou est ce que j'ai besoins encore de :
Code :
|
Ca je comprend pas très bien
Marsh Posté le 06-01-2004 à 21:53:51
Il affecte à une variable de la classe un objet qui a été passé en paramètre, rien de plus
Marsh Posté le 06-01-2004 à 21:55:05
ta classe B ne connait pas ton objet $A, donc tu es obligé de le lui passer à un moment ou un autre.
Marsh Posté le 06-01-2004 à 22:11:07
ok je crois que j'ai compris le principe
Mais ca marche pas encore. J'ai fait quelque chose comme ca dans index.php:
$B->PassObject($A->lafonctiondeA());
Marsh Posté le 06-01-2004 à 22:16:14
ou bien ca ?
include "A.class.php";
$a = new A();
include "B.class.php";
$b= new B();
$B->PassObject($a);
mais je pense pas...
Marsh Posté le 07-01-2004 à 01:13:13
big-foot a écrit : |
Si tu as juste besoin d'une méthode de la classe A plutôt que de l'objet lui-même, tu devrais pouvoir le passer par référence non ?
Marsh Posté le 07-01-2004 à 13:08:12
naceroth a écrit : |
désolé je comprend pas là, je suis pas encore surper fort en prog orienté objet...
Est ce que tu peu ecrire ce qui manque dans mon exemple stp ?
J'ai ca :
une class : database.php
une class : page_title.php
une page index.php
Ma class database.php :
Code :
|
ma class page_title.php :
Code :
|
ma page index.php :
Code :
|
J'éspere que vous me direz comment faire pour que ca marche
Marsh Posté le 07-01-2004 à 16:56:14
Big-Foot a écrit : |
ok, on va y aller lentement alors
class database.php :
Code :
|
change pas, il faut juste que dans DbSelect tu n'utilises pas d'autre élément de la classe (donc pas de $this-> dans la fonction)
class page_title.php :
Code :
|
index.php :
Code :
|
Le passage par référence consiste à utiliser une fonction d'une classe (ici DataBase) sans créer l'objet correspondant. Attention toutefois, comme tu ne crées pas l'objet, tu n'as pas accès à ses propriétés, donc pas d'accès aux variables de DataBase.
Marsh Posté le 07-01-2004 à 20:58:37
utilises plutôt le singleton pour la DB
Code :
|
dans tes autres classes tu peux l'appeller comme l'a dit naceroth par
Code :
|
Si elle n'existe pas, elle sera crée, sinon tu utiliseras l'existante ce qui te permettra par exemple de faire des stats comme indiquer combien de querys tu as faits pour afficher ta page. De plus tu n'auras qu'une connexion à ta DB par page, ce qui peux être mieux (mais ça ça a fait l'objet de pas mal de discussion pour savoir s'il vaut mieux faire une query et fermer la connexion directmeent ou pas...).
Marsh Posté le 08-01-2004 à 18:01:22
Citation : change pas, il faut juste que dans DbSelect tu n'utilises pas d'autre élément de la classe (donc pas de $this-> dans la fonction) |
Et si justement il a des élements de la classe je fait comment ?
Marsh Posté le 10-01-2004 à 19:36:24
oki j'ai utilisé ta methode ethernal, dans database j'ai mis ca :
Code :
|
1 bon point déjà, ca me fait pas d'erreur
Mais ca ne sort rien de la db j'ai limpression.
Est ce que ca pose probleme si avant de faire un $pagetitle = new PageTitle(); j'ai déjà un $database = new DataBase(); ?
Marsh Posté le 11-01-2004 à 01:43:18
tu ne dois jamais utiliser new database() dans ton code, mais bien
$database= Database::getDB();
Marsh Posté le 06-01-2004 à 21:18:56
hello,
Disons que j'ai une page index.php, une class A.php et une class B.php
Je fait un include de la class A dans index.php, et juste à la suite je fait un $a = new A();
Jusque là c'est ok.
Après ca je fait un include de la class B dans index.php
Et c'est la le probleme : dans ma class B j'utilse la class A, mais celle-ci n'est pas incluse dans le B.php mais seulement dans le index.php
Je croyais que ca fonctionnerais mais il semble que non
Est ce que c'est une erreur de ma part (je l'espère en tout cas, sinon je vais bien m'amuser...)
Message édité par Big-Foot le 06-01-2004 à 21:20:32