9
votes

Méthode de classe d'appel (avec constructeurs) sans instanciation d'objet dans PHP

ive regarda et essayé mais je ne trouve pas de réponse.

dans PHP, est-il possible d'appeler une fonction de membre de classe '(lorsque cette classe nécessite un constructeur de recevoir des paramètres) sans l'instanciation d'un objet?

Un exemple de code (qui donne des erreurs): xxx


2 commentaires

Je pensais que Echo Test :: __ construire ("monde") :: alerte ("bonjour"); pourrait travailler mais ce n'est pas, soupir


faire une alerte () à une fonction statique fera le travail.


5 Réponses :


1
votes

Vous ne pouvez pas appeler une méthode de niveau d'instance sans instance. Votre syntaxe:

new Test("Hello")->foo("world");


1 commentaires

Je crée une instance inline et je l'écartant immédiatement. Je ne vois pas pourquoi j'ai besoin d'allouer une variable à ce processus ... est-ce juste la façon dont PHP / OOP est?



25
votes

Malheureusement, PHP n'a pas de soutien pour le faire, mais vous êtes un gars créatif et look: d

Vous pouvez utiliser une "usine", échantillon: xxx < / p>


1 commentaires

Je pense que ne fonctionnera pas. Comme vous ne pouvez pas faire référence à $ ceci sans faire un objet.



2
votes

I, aussi, cherchait un one-liner pour accomplir cela dans le cadre d'une seule expression pour la conversion des dates d'un format à un autre. J'aime faire cela dans une seule ligne de code car il s'agit d'une seule opération logique. Donc, c'est un peu cryptique, mais il vous permet d'instancier et d'utiliser un objet de date dans une seule ligne:

function convertDate($oldDateString,$newDateFormatString) {
    $d = new DateTime($oldDateString);
    return $d->format($newDateFormatString);
}

$myNewDate = convertDate($myOldDate,'F d, Y');


0 commentaires

11
votes

juste faire ceci (en PHP> = 5.4):

$t = (new Test("Hello"))->foo("world");


0 commentaires

0
votes
// this does not work:
echo Test("world")::alert("hello");

// works, as you are calling not to an object of the class, but to its namespace
echo Test::alert("hello");

0 commentaires