# Introduction

Avertissement

Cette extension est EXPERIMENTALE. Le comportement de cette extension, les noms de ses fonctions, et toute la documentation autour de cette extension peut changer sans préavis dans une prochaine version de PHP. Cette extension doit être utilisée à vos risques et périls.

SCA pour PHP rend possible aux programmeurs PHP l'utilisation de composants réutilisables, qui peuvent être appelées de différentes façons, avec une interface identique et un minimum de tracas. Actuellement, les composants peuvent s'appeller l'un l'autre, localement ou via des services Web, mais a l'avenir, il est prévu de mettre en place d'autres moyens de communication. SCA fournit aux programmeurs une approche aussi naturelle que possible pour cela.

Les composants SCA utilisent des annotations style phpDocumentor (voyez http://www.phpdoc.org/) pour déclarer des dépendances avec les autres composants SCA ou les services Web. L'exécuteur SCA de PHP résout ces dépendances à l'exécution, pour les autres composants, et permet au développeur PHP de se concentrer sur la logique métier, plutôt que sur la localisation des ressources.

Le modèle SCA pour PHP peut être étendu pour supporter de nombreux autres types de services, tels que REST et Atompub. Cependant, les services Web, et plus exactement, les services SOAP sur HTTP avec document WSDL) sont les seuls qui soient spécifiés.

Les composants utilisent aussi les annotations pour définir les interfaces avec lesquels ils exposent leurs services. L'exécuteur SCA pour PHP va automatiquement générer le document WSDL pour ces annotations, afin que les composants puissent exposer facilement leurs services Web. Ces annotations sont une extension naturelle de phpDocumentor. Déployer un service Web peut alors êtr aussi simple que de placer un composant PHP dans la racine Web d'un serveur Web.

Les composants utilisent aussi les annotations pour spécifier les structures de données (exprimées avec des types complexe de schéma XML), qui sont gérés avec Service Data Objects (SDOs).

Un script PHP qui n'est pas un composant SCA et qui ne contient aucune annotation peut utiliser les services d'un composant SCA. Un script PHP ou un composant peut faire des appels à un service Web qui n'utilise pas SCA, mais en utilisant le même système d'appels et d'annotations pour obtenir une référence.

Tout d'abord, nous présent un composant SCA simple, ConvertedStockQuote, qui illustre l'utilisation de SCA pour PHP. Il dispose d'une méthode getQuote(), qui, à partir d'un identifiant d'actions retourne le cours de l'action, converti dans une devise donnée. Nous utiliserons cet exemple comme base pour présenter SCA pour PHP dans le reste de la documentation.

Exemple #1 Exemple simple avec SCA

`<?php
include "SCA/SCA.php";
/**
* Calcule le prix d'une action, à partir de son symbole, dans une devise.
*
* @service
* @binding.soap
*/
class ConvertedStockQuote {
/**
* Le service de taux de change à utiliser
*
* @reference
* @binding.php ../ExchangeRate/ExchangeRate.php
*/
public $exchange_rate;
/**
* Le service de cotation des actions à utiliser
*
* @reference
* @binding.soap ../StockQuote/StockQuote.wsdl
*/
public $stock_quote;
/**
* Lit le prix d'une action, pour un symbole, dans une devise
*
* @param string $ticker Le symbole.
* @param string $currency La devise.
* @return float Le cours de l'action.
*/
function getQuote($ticker, $currency)
{
$quote = $this->stock_quote->getQuote($ticker);
$rate = $this->exchange_rate->getRate($currency);
return $rate * $quote;
}
}
?>`

Dans cet exemple, nous voyons que le composant SCA est implémenté à l'aide d'une classe PHP, et qu'il inclut SCA.php. La classe contient un mélange de logique métier et de références à d'autres services et composants. Dans la méthode illustrée, getQuote() il n'y a que de la logique métier, mais elle repose sur les variables $stock_quote et $exchange_rate qui ont été initialisées. Ces variables font référence à deux autres composants, et seront initialisées par l'exécutable SCA, via des proxy pour ces deux services, à chaque fois que notre composant est exécuté. Les annotations de ces deux services montrent que l'un est un service local, qui sera appelé avec le même exécutable PHP, et que l'autre est un composant distant, qui sera appelé avec une requête SOAP. Ce composant expose alors la méthode getQuote(), localement et comme service Web, pour que l'on puisse y accéder localement et à distance.