PHP ve JavaScript Arasındaki Hisse sabitler [çoğaltmak]

4 Cevap php

Possible Duplicate:
Pass a PHP string to a Javascript variable (and escape newlines)

Ben geliştiriyorum bir PHP uygulama çeşitli sabitleri var. Ben bir Sabitler sınıfı tanımlanmış ve const var_name = değeri olarak sabitler tanımlanan ettik; Bu sınıfta. Benim JavaScript ve PHP kod arasındaki bu sabitleri paylaşmak istiyorum. Bunları paylaşmak için bir KURU (tekrar edin etmeyin) mekanizma var mı?

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

4 Cevap

Ben kullanmak istiyorum json_encode. Önce bir ilişkisel dizi için sınıf dönüştürmek gerekir.

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

Eğer bir sınıf kullanmayı tercih olsaydı da bir ilişkisel dizi sınıfını dönüştürmek için yansıma kullanabilirsiniz.

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"));

"Client_server_shared.js" JavaScript ve PHP hem ortak sabitleri bir listesini koyun.

'Var' JavaScript gerekli, ve bir sınıf içinde eğer PHP yasal (önerilmiyor olsa) olduğunu. Bir değişken adı başlatmak için '$' PHP gerekli, ve JavaScript yasaldır.

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

PHP-Kodu:

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 Kod:

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

Eğer sabitleri paylaşabilirsiniz tek yolu php tarafı javascript bilgilendirmek sahip olmaktır. Örneğin:

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

Veya ajax kullanarak, ayrıca JSON / neyse gibi sabitler dönecekti küçük bir senaryo yazabilirim.

Çirkin kesmek biraz, ama burada öyle gider:

constants.js

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

constants.html (JavaScript içinde kullanım)

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

constants.php (PHP içi kullanım)

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

echo $const1;
?>