fonction statique dans une classe non statique

Invité
Invité n'ayant pas de compte PHPfrance

02 avr. 2015, 15:43

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.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 avr. 2015, 21:38

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 ?
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

nestecha
Invité n'ayant pas de compte PHPfrance

12 avr. 2015, 23:11

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 avr. 2015, 13:54

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);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...