481 votes

Comment définir un objet vide en PHP

avec un nouveau tableau j’ai procédez comme suit :

Y at-il une syntaxe semblable pour un objet

977voto

zombat Points 46702
$x = new stdClass();

Un commentaire dans le manuel , il résume le mieux:

stdClass est la valeur par défaut de PHP objet. stdClass n'a pas de propriétés, de méthodes ou de parent. Il ne prend pas en charge la magie méthodes, et met en œuvre aucune des interfaces.

Lorsque vous lancez un scalaire ou un tableau comme Objet, vous obtenez une instance de stdClass. Vous pouvez utiliser stdClass chaque fois que vous avez besoin d'un objet générique exemple.

41voto

PaulP Points 895

Je tiens à souligner qu’en PHP, il n’y a aucune une telle chose comme objet vide de sens :

mais bien sûr $obj sera vide.

Sur une autre baie vide main signifie vide dans les deux cas

Citation de changelog fonction vide

Objets avec aucune des propriétés ne sont plus considérés comme vides.

20voto

HungryCoder Points 4321

php.net dit qu'il vaut mieux :

5voto

INTPnerd Points 1060

Comme d'autres l'ont souligné, vous pouvez utiliser stdClass. Cependant, je pense que c'est plus propre sans les (), comme ceci:

$obj = new stdClass;

Toutefois, d'après la question, il me semble que ce que vous voulez vraiment est d'être en mesure d'ajouter des propriétés à un objet à la volée. Vous n'avez pas besoin d'utiliser stdClass pour cela, bien que vous le pouvez. Vraiment, vous pouvez utiliser n'importe quelle classe. Il suffit de créer une instance d'objet de toute classe et de commencer à définir des propriétés. Je voudrais créer ma propre classe dont le nom est tout simplement o avec des fonctionnalités étendues et que j'aime utiliser dans ces cas et est agréable pour les étendre à d'autres classes. Fondamentalement, il s'agit de ma propre base de la classe d'objet. J'aime aussi avoir une fonction simplement nommé o(). Comme suit:

class o {
  // some custom shared magic, constructor, properties, or methods here
}

function o() {
  return new o;
}

Si vous ne voulez pas avoir votre propre type d'objet de base, vous pouvez tout simplement avoir o() retourne une nouvelle stdClass. Un avantage est que de o est plus facile à retenir que stdClass et est plus courte, peu importe si vous l'utiliser comme un nom de classe, le nom de la fonction, ou les deux. Même si vous n'avez pas de code à l'intérieur de votre classe, il est encore plus facile à mémoriser que les maladroitement capitalisés et nommé stdClass (il me fait toujours penser à de la "maladie sexuellement transmissible'). Si vous ne personnalisez le o catégorie, vous pouvez trouver une utilisation pour les o() à la place du constructeur de la syntaxe. C'est une fonction normale qui retourne une valeur, ce qui est moins limitée que celle d'un constructeur. Par exemple, une fonction peut être passé dans une chaîne de caractères à une fonction qui accepte un callable paramètre. Une fonction prend également en charge le chaînage. Si vous pouvez faire quelque chose comme: $result= o($internal_value)->some_operation_or_conversion_on_this_value();

C'est un excellent point de départ pour une base de "langue" à la construction d'autres langues couches de la couche supérieure étant écrit en interne complète des Dsl. Ceci est similaire à la lisp style de développement, et de PHP supporte bien mieux que la plupart des gens réalisent. Je réalise que c'est un peu de la tangente à la question, mais la question qui touche à ce que je pense est la base pour exploiter pleinement la puissance de PHP.

1voto

Kerosene Points 8

Vous avez ce mal mais utile technic :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X