Pytanie Udostępnianie stałych między PHP i JavaScript [duplikat]


Możliwe duplikaty:
Przekaż ciąg PHP do zmiennej JavaScript (i wyjdź z newlines) 

Mam kilka stałych w rozwijanej aplikacji PHP. Zdefiniowałem klasę stałych i zdefiniowałem stałe jako const VAR_NAME = value; w tej klasie. Chciałbym udostępnić te stałe między moim kodem JavaScript i PHP. Czy istnieje mechanizm DRY (Nie powtarzaj się), aby je udostępnić?

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

12


pochodzenie




Odpowiedzi:


użyłbym json_encode. Najpierw musisz przekonwertować klasę na tablicę asocjacyjną.

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

Możesz także użyć odbicia, aby przekonwertować klasę na tablicę asocjacyjną, jeśli wolisz używać klasy.

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

8



Zmieszałeś składnię JavaScript i PHP. W PHP nie ma obiektu JSON. Istnieją tylko funkcje json _ * (). - Gumbo
Ups. Zaktualizowałem go, aby nie było zamieszania: D - Adam Peck
To świetnie, jednak get_class_vars wydaje się pomijać zmienne stałych w klasie. - Brian Fisher
Heh. Ładne łatanie. - Crescent Fresh
Hej przynajmniej jest teraz :) Chociaż nadal uważam, że najprostszą metodą jest pozostawienie go w tablicy asocjacyjnej. I tym razem też go przetestowałem! - Adam Peck


Umieść listę stałych wspólnych dla obu skryptów JavaScript i PHP w "client_server_shared.js".

"var" jest wymagany w JavaScript i jest legalny (choć przestarzały) w PHP, jeśli znajduje się wewnątrz klasy. "$", aby uruchomić nazwę zmiennej jest wymagane w PHP i legalne w JavaScript.

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

Kod PHP:

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;

Kod JavaScript:

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

1



Bardzo podoba mi się prostota tego rozwiązania, ale jeśli var jest przestarzałe w PHP, powinniśmy założyć, że to rozwiązanie ostatecznie się zepsuje, prawda? - skelliam


Jedynym sposobem, w jaki możesz udostępniać stałe, jest informowanie javascript przez stronę php. Na przykład:

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

Lub używając ajax, możesz również napisać mały skrypt, który zwróci stałe jako JSON / cokolwiek innego.


-1





Trochę brzydkiego hacka, ale oto:

constants.js

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

constants.html (użyj wewnątrz JavaScript)

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

constants.php (użyj wewnątrz PHP)

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

echo $const1;
?>

-2



Wiedziałem, że ta odpowiedź spadnie na dół! :) - Ates Goral