Page 1 sur 1

fonction statique dans une classe non statique

Posté : 02 avr. 2015, 15:43
par Invité
Bonjour a tous,

Je souhaite savoir si c'est possible d'appeler une fonction non statique dans une fonction statique.

J'ai ceci:
class maClasse 
{
     public function laNonStatique ()
     {

     }
     public static function laStatique ()
     {
               //comment appeler laNonStatique () ici ? 
     }
}
En vous remerciant pour vos réponses.

Re: fonction statique dans une classe non statique

Posté : 04 avr. 2015, 21:38
par sadeq
En principe on crée des fonctions statiques pour pouvoir les appeler via leur classe sans devoir instancier cette dernière dans un objet. Cet appel "direct" est sous la forme CLASSE::FONCTION. On utilise cette forme de conception pour bénéficier de fonctions globales et/ou un espace de données statique unique et partagé.
Donc je ne vois pas pourquoi vous avez besoin de mélanger des fonctionnalités spécifiques à un objet et donc non statiques avec d'autres statiques qui ne doivent être spécifiques mais au contraire d'utilité globale ?

Re: fonction statique dans une classe non statique

Posté : 12 avr. 2015, 23:11
par nestecha
class maClass {
	private $iID;
	private $sName;

	public function setId($iID) {
		$this->iID = $iID;
	}

	public function setName($sName) {
		$this->sName = $sName;
	}

	public static function getObjectWithParams($sName, $iID) {
		$oMaClasse = new maClass();
		$oMaClasse->setId($iID);
		$oMaClasse->setName($sName);

		return $oMaClasse;
	}
}

$oMaClasse = maClass::getObjectWithParams('name', 1);
Ca n'a effectivement pas grand intérêt dans ce cas, mais en gros voilà comment faire.

Re: fonction statique dans une classe non statique

Posté : 13 avr. 2015, 13:54
par Ryle
Dans la mesure où tu retourne une instance de la classe que tu ne veux pas instancier (en passant par la méthode static), il n'y a effectivement pas d'intérêt à ce mode de fonctionnement. Le mieux pour cela est de passer par le constructeur de la classe :
$oMaClasse = new maClass('name', 1);