11
votes

Objets de type Javascript dans PHP?

C'est assez pratique dans JS pour créer des objets tels que ceci: xxx

puis utilisez-les comme: xxx

y a-t-il de quelque chose comme Ceci en PHP sans déclarer des cours?


0 commentaires

9 Réponses :


15
votes

Il s'appelle des tableaux associatifs.

Exemple (Remarque: l'indentation est à des fins de présentation): xxx

Ceci est équivalent au code JavaScript suivant: xxx

comme alternative, vous pouvez utiliser le stdclass pré-déclaré. xxx

qui serait écrit en JavaScript comme suit: xxx

(Remarque: nouvel objet est identique à {} dans javascript)


1 commentaires

(Nitpick) Les objets ne sont pas identiques que des tableaux associatifs, les deux premiers exemples ne sont pas équivalent . Utilisation de JSON_ENCODE sur le tableau ASTM produirait des objets JavaScript car il n'y a pas de tableaux ASTA en JavaScript, mais ce n'est pas vrai pour utiliser json_decode sur l'objet JavaScript. Par défaut, JSON_Decode retournera des objets pour cela.



3
votes

Vous pouvez utiliser un objet STDCLASS ou une arrayObject inclus dans PHP (bien que ce dernier nécessite que vous avez installé SPL). Bien que, sauf si vous n'avez besoin d'accéder aux valeurs spécifiquement avec l'opérateur -> , c'est plus efficace pour simplement utiliser un tableau associatif.


0 commentaires

0
votes

Je pense que ce que vous cherchez est un tableau associatif xxx

http://www.google.com/search?sourceid=chrome&e=utf-8&q=Keyed+Arrays


1 commentaires

test est une constante. Il devrait être $ test .



0
votes

La chose la plus proche serait des matrices.

$test = array(
  'foo' => array('bar' => 'hello world'),
  'bar2' => 'hello world 2',
);

echo $test['foo']['bar'];


2 commentaires

Eh bien, je sais sur les tableaux. Je demandais spécifiquement des objets comme ils sont plus flexibles, par exemple. Si vous voulez que vous puissiez ajouter des méthodes, pas seulement des données.


Comment les objets sont-ils plus flexibles dans ce cas? Vous ne pouvez pas ajouter des méthodes à un objet stdclass comme vous pouvez en JavaScript. Le plus proche que vous puissiez obtenir est de déclarer une propriété dans l'objet STDCLASS et d'attribuer un objet qui a les méthodes dont vous avez besoin. Vous pouvez aussi facilement cela avec des tableaux. La chose seulement qui diffère est la syntaxe utilisée pour obtenir ce dont vous avez besoin; Je ne vois aucune différence de flexibilité.



0
votes

Techniquement, non. Toutefois, si vous créez un objet de données (c.-à-d. Aucune méthode), vous pouvez techniquement écrire une chaîne JSON et utiliser

$obj = json_decode($obj_string);


1 commentaires

(Sidenote) Le OP est manquant des citations autour des propriétés, donc json_decode ne renvoie rien parce que c'est invalide JSON.



0
votes

La seule raison de faire c'est si vous souhaitez transmettre des données à une fonction JavaScript avec JSON. Dans ce cas, utilisez json_encode sur le tableau. Sinon, gardez-le comme une matrice, car il n'y a pas de raison de le coder, puis de le décoder, alors cela ressemble à JavaScript.


0 commentaires

14
votes

stdclass vous permet de créer (essentiellement) des objets sans faille. Par exemple: xxx pré>

comme indiqué ici, le moyen le plus rapide de créer un objet STDCLASS est de lancer un tableau associatif. Pour plusieurs niveaux, vous faites simplement la même chose à nouveau à l'intérieur comme suit: p> xxx pré>

Une autre méthode consiste à convertir le tableau associatif en un objet ensuite avec une fonction récursive. Voici un exemple. P>

function toObject(array $array) {
    $array = (object) $array;
    foreach ($array as &$value)
        if (is_array($value))
            $value = toObject($value);

    return $array;
}
// usage:
$array = // some big hierarchical associative array...
$array = toObject($array);


0 commentaires

0
votes

Essayez de cette façon: https://github.com/ptrofimov/jslikeObject

Auteur Mise en œuvre d'objets JS-SIMS, vous pouvez même accéder aux propriétés des fonctions via ce pointeur $.

Mais peut-être que ce n'est pas si bon d'utiliser de tels objets au lieu de ceux habituels.


0 commentaires

0
votes
$a = array(
'a'=> 123,
'b'=> 334,
'c'=> 7853
 );
echo json_encode($a);
This will be the result: {"a":123,"b":334,"c":7853}

0 commentaires