J\'ai un petit soucis de syntaxe pour accéder à une méthode d\'un objet instancier dans ma classe actuelle.
Je m\'explique
J\'ai une classe a avec plusieurs variables d\'instances dont une est une instance de ma classe b .
Je voudrais dans une fonction de ma classeA accéder à une méthode de ma classeB , mais je ne sais pas quel opérateur je dois utiliser :/ . Le chainage de -> ca n\'a pas l\'air de passer .
<?php
class classeA
{
private $var1=null;
private $var2 = null;
public function __construct()
{
$this->var1 = 5;
$this->var2 = news classeB($this->var1);
}
public function methode()
{
$this->var2 //et la j\'aimerais accéder à la methode bidon de la classeB
}
}
class classeB
{
public function __construct(){ }
public function methodeBidon()
{
echo \'bidon\';
}
}
?>
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
Vous ne disposez pas des droits suffisant pour éditer ce sujet du forum
Je voulais editer mon message pour enlever le paramètre que j'envois au constructeur de la classeB pour me corriger
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
$this->objetA->methodeB() , ca ne me fait rien du tout :/, je l'ai déjà cité au dessus , le chainage de -> ne s'interprète pas .
En fait j'aimerais avoir comme variable d'instance mon objetB pour éviter de devoir le créer pour chaque méthode de ma classeA qui en ont l'utilitée.
Le programmeur étant fainéant ( si si xD ) , écrire pour chaque methode un new de cet objet alors qu'avec une seule fois ca suffirait .
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
attention, si je comprend bien, l'instance B et la méthode qui appelle une méthode de la classe B sont tous les deux dans une classe A.
Imaginons, tu as une classe B avec une méthode BlablaB() dedans.
Un autre classe A ou tu as une variable de type classe B ( variableB ) et une méthode qui doit acceder à la méthode de la classe B ( AccesToMethodeB() ).
Ca donne :
// Méthode de la classe A
function AccesToMethodeB()
{
$this->variableB->BlablaB();
}
Dans ton code :
ReaM dit : $this->objetA->methodeB()
Tu sembles essaye, à partir de la classe A, d'acceder à la classe A.... Bizarre.
__________________________
A tous les membres, dite non à la (drogue...) sms-mania !
Avant de poster, vérifiez si la réponse n'est pas dans la FAQ ou un tutorial.
Bon ici j'ai pas accès à mes sources , dès que je reviens @home ( vacances xD ) , je posterai mes classes et mon application ;)
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
Bon j'ai une vieille version de mon brole ^^ sur mon portable .
<?php
class News
{
private $nbrNews = null;
private $table = null;
private $connection = null;
public function __construct()
{
$this->nbrNews = 5;
$this->table = 'tbl_news';
}
public function DisplayNews()
{
$connection = new Connection($this->table);
$tempSql = $connection->microtime_float();
$newsTemplate = new Template("./");
$result = $connection->execQuerySelect(array('*'),' ');
$nbrNews = mysql_num_rows($result);
if ($nbrNews < $this->nbrNews) $page=1;
else $page= round($nbrNews/$this->nbrNews);
$newsTemplate->set_filenames( array('body' => './templates/news.tpl'));
while( $row = mysql_fetch_array($result) )
{
$newsTemplate->assign_block_vars('news', array(
'TOPIC' => $row['news_topic'],
'CONTENU' => $row['news_contenu'],
'DATE' => $row['news_date'],
'TIME' => $row['news_time'],
'USER' => $row['news_user']
));
}
// Affichage des données
$newsTemplate->pparse('body');
for ($i =1 ; $i <=$page ; $i++) echo $i.' ';
echo 'Temps d\'execution :'.($tempSql - $connection->microtime_float());
unset($connection);
}
public function AdminNews()
{
$connection = new Connection($this->table);
$tempSql = $connection->microtime_float();
$result = $connection->execQuerySelect(array('*'),'where news_id=\'1\'');
$newsTemplate = new Template("./");
$newsTemplate->set_filenames( array('body' => './templates/adminnews.tpl'));
while( $row = mysql_fetch_array($result) )
{
$newsTemplate->assign_vars( array(
'TOPIC' => $row['news_topic']
));
}
$newsTemplate->pparse('body');
echo 'Temps d\'execution :'.($tempSql - $connection->microtime_float());
unset($connection);
}
public function AddNews($topic,$contenu,$user,$categ)
{
$connection = new Connection($this->table);
$arrayData=array('NULL','NOW()','NOW()',$topic,$contenu,$user,$categ);
if ($connection->execQueryAdd($arrayData))return true;
else return false;
}
public function __destruct(){}
}
?>
Au lieu de créer mon objet connection à l'intérieur de ma méthode , je voulais la faire lors de l'appel de mon constructeur . ( Pq écrire pour toute mes méthodes $connection = new Connection($this->table); alors qu'une fois suffirait ) .
Le problème est que si je le fais dans mon constructeur , dans ma méthode DisplayNews() , j'ai bien accès à mon objet connection ( $this->connection ) , mais pas au méthode de cet objet la ($this->connection->checkTable() par exemple , si c'est bien de cette manière la qu'il faut faire ).
Voila j'espère que cette fois ci nous sommes sur la même longueur d'onde ;)
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
que donnerait un $this->connexion::methode() ?
en tous cas je trouve ça improbable qu'il n'y ait pas une méthode pour réaliser cette action
__________________________
Spirit - modérateur casu ^-^'
Ben, la solution qu'utilise de nombreux sites sur lesquels j'ai jeté un oeil ( MP en autre ) ... Tu crée une instance de connection sur le script principal de ton site et tu le passe par référence à ton objet lors du constructeur.
Sinon, ton idée est faisable. Par contre, quand tu crées l'instance, il ne faut pas que tu écrives $connection = new connection( blabla ); mais $this->connection = new connection( bla bla );
voila tout ce que je peux dire
__________________________
A tous les membres, dite non à la (drogue...) sms-mania !
Avant de poster, vérifiez si la réponse n'est pas dans la FAQ ou un tutorial.