Suite à l'instanciation d'une classe Java, les attributs et les méthodes d'instance deviennent disponibles via la syntaxe PHP. Le constructeur java() peut prendre une liste des arguments après le nom de la classe à instancier.
$chaine = new java('java.lang.StringBuffer', 'Bienvenue '); $chaine->append('dans '); $chaine->append('le '); $chaine->append('monde '); $chaine->append('Java'); $chaine->insert(0, '<p>'); $chaine->append('</p>'); $taille = $chaine->length(); echo $chaine->toString() . ' (' . $taille . ')';
Le constructeur java_class() permet d'obtenir une classe à partir de laquelle des méthodes ou des attributs de classe (ou statiques) pourront être invoquées.
$systeme = new java_class("java.lang.System"); $proprietes = $systeme->getProperties(); echo '<table>'; foreach ($proprietes as $cle => $valeur) echo '<tr><th>' . $cle . '</th><td>' . $valeur . '</td></tr>'; echo '</table>';
La boucle foreach permet de parcourir des collections Java, comme des listes (List), des ensembles (Set) ou des maps (Map).
Les tableaux Java profitent également de la boucle foreach.
$ch = new java('java.lang.String', $chaine->toString()); $tableau = $ch->split(' '); echo '<ul>'; foreach($tableau as $valeur) echo '<i>' . $valeur . '</li/>'; echo '</ul>';
L'instruction instanceof ne pouvant vérifier que l'instance d'une classe PHP, la fonction java_instanceof() pallie à cette limititation et se charge de vérifier si un objet Java est effectivement l'instance d'une classe Java.
try { $dbf = new java_class( 'javax.xml.parsers.DocumentBuilderFactory'); $oDbf = $dbf->newInstance(); $oDbf->setValidating(true); $db = new java_class('javax.xml.parsers.DocumentBuilder'); $oDb = $oDbf->newDocumentBuilder(); $url = new java('java.net.URL', 'file:///C:\fichier.xml'); $flux = $url->openStream(); $doc = $oDb->parse($flux); $racine = $doc->getDocumentElement(); $nom = $racine->getTagName(); $type = $racine->getNodeType(); $valeur = $racine->getNodeValue(); echo '<h3>'; afficherInfos($nom, $type, $valeur); echo '</h3>'; $liste = $racine->getChildNodes(); parcourir($liste); } catch (java_exception $e) { '<p style="color: red">' $e->getMessage() . '</p>'; } function parcourir($liste){ echo '<ul>'; if(!java_instanceof($liste, new java_class('org.w3c.dom.NodeList'))) return false; for($i = 0; $i < $liste->getLength(); $i++){ $noeud = $liste->item($i); if(is_null($noeud) || !($noeud instanceof java)) continue; $type = $noeud->getNodeType(); $valeur = $noeud->getNodeValue(); if(java_instanceof($noeud, new java_class('org.w3c.dom.Element'))){ $nom = $noeud->getTagName(); afficherInfos($nom, $type, $valeur); if($noeud->hasChildNodes()){ parcourir($noeud->getChildNodes()); } } else if(java_instanceof($noeud, new java_class('org.w3c.dom.Text'))){ $nom = '#text'; afficherInfos($nom, $type, $valeur); } } echo '</ul>'; } function afficherInfos($nom, $type, $valeur){ echo '<li>' . $nom . ' (' . $type . ') = "' . $valeur . '"</li>'; }
Le bloc try...catch rend obsolète les fonctions java_last_exception_get() et java_last_exception_clear(). En effet, il n'est plus utile d'invoquer ces méthodes puisque la gestion des exceptions en PHP est devenue suffisamment puissante pour traiter les erreurs d'exécution.
Les blocs try...catch peuvent encadrer tout un programme ou des parties bien délimitées pour lesquelles une exception précise doit être gérée séparément ou qu'un message particulier doit être envoyé à l'utilisateur.
La fonction java_get_session() permet de faire persister des variables durant l'exécution du script PHP. Normalement, les variables stockées dans la session doivent être des classes ou des instances de classe Java.
Un objet de session possède quatres méthodes.
$session = java_get_session('nom_session'); if($session->isNew()) { $sys = new java_class('java.lang.System'); $date = new java('java.util.Date'); $format = new Java('java.text.SimpleDateFormat', 'dd/mm/yyyy hh:mm:ss'); $session->put('system', $sys); $session->put('date', $date); $session->put('format', $format); } else { print($session->get('format')->format($session->get('date'))); $session->destroy(); }