12 Stimmen

Gemeinsame Nutzung von Konstanten zwischen PHP und JavaScript

Mögliches Duplikat:
Übergabe eines PHP-Strings an eine Javascript-Variable (und Escape-Zeilen)

Ich habe mehrere Konstanten in einer PHP-Anwendung, die ich entwickle. Ich habe eine Klasse Constants definiert und die Konstanten als const VAR_NAME = value; in dieser Klasse definiert. Ich möchte diese Konstanten zwischen meinem JavaScript- und PHP-Code austauschen. Gibt es einen DRY-Mechanismus (Don't Repeat Yourself), um sie gemeinsam zu nutzen?

class Constants {
    const RESOURCE_TYPE_REGSITER = 2;
    const RESOURCE_TYPE_INFO = 1;
}

8voto

Adam Peck Punkte 6782

Ich würde verwenden json_encode . Sie müssen die Klasse zunächst in ein assoziatives Array umwandeln.

$constants = array("RESOURCE_TYPE_REGISTER"=>2, "RESOURCE_TYPE_INFO"=>2);
echo json_encode($constants);

Sie könnten auch Reflection verwenden, um die Klasse in ein assoziatives Array umzuwandeln, wenn Sie lieber eine Klasse verwenden möchten.

function get_class_consts($class_name)
{
    $c = new ReflectionClass($class_name);
    return ($c->getConstants());
}

class Constants {
    const RESOURCE_TYPE_REGSITER = 2;
    const RESOURCE_TYPE_INFO = 1;
}

echo json_encode(get_class_consts("Constants"));

0 Stimmen

Sie haben JavaScript- und PHP-Syntax vermischt. In PHP gibt es kein JSON-Objekt. Es gibt nur json_*()-Funktionen.

0 Stimmen

Ups. Ich habe es aktualisiert, damit es keine Verwirrung gibt :D

0 Stimmen

Dies ist großartig, jedoch scheint get_class_vars die konstanten Variablen in der Klasse zu überspringen.

2voto

Dave Punkte 1

Fügen Sie eine Liste von Konstanten, die sowohl für JavaScript als auch für PHP gelten, in "client_server_shared.js" ein.

var' wird in JavaScript benötigt und ist in PHP legal (wenn auch veraltet), wenn es innerhalb einer Klasse steht. '$' am Anfang eines Variablennamens ist in PHP erforderlich und in JavaScript zulässig.

var $shared_CONSTANT1 = 100;
var $shared_CONSTANT2 = 'hey';

PHP-Code:

eval('class Client_server_shared{'                   ."\n"
.     file_get_contents( 'client_server_shared.js' ) ."\n"
.    '}'
.    '$client_server = new Client_server_shared();'
);

echo $client_server->shared_CONSTANT1;   // Proof it works in PHP.
echo $client_server->shared_CONSTANT2;

JavaScript-Code:

alert( $shared_CONSTANT1 );              // Proof it works in JavaScript.
alert( $shared_CONSTANT2 );

0 Stimmen

Ich mag wirklich die Einfachheit dieser Lösung, aber wenn var in PHP veraltet ist, sollten wir davon ausgehen, dass diese Lösung schließlich brechen, richtig?

-1voto

jacobangel Punkte 6688

Die einzige Möglichkeit, die Konstanten gemeinsam zu nutzen, besteht darin, dass die php-Seite das Javascript informiert. Zum Beispiel:

echo "<script> var CONSTANT1 =".$constant_instance->CONSTANT_NAME.";</script>";

Mit Ajax könnten Sie auch ein kleines Skript schreiben, das die Konstanten als JSON/was auch immer zurückgibt.

-2voto

Ates Goral Punkte 132294

Ein etwas hässlicher Hack, aber es geht:

konstanten.js

//<?php
$const1 = 42;
$const2 = "Hello";
//?>

konstanten.html (Verwendung innerhalb von JavaScript)

<script type="text/javascript" src="constants.js"></script>
<script type="text/javascript">document.write($const1);</script>

konstanten.php (Verwendung innerhalb von PHP)

<?php
ob_start(); // start buffering the "//"
require "constants.js";
ob_end_clean(); // discard the buffered "//"

echo $const1;
?>

0 Stimmen

Ich wusste, dass diese Antwort abgelehnt werden würde! :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X