Introducción

Advertencia

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombres de sus funciones y todo lo documentado sobre esta extensión, puede cambiar en una futura edición de PHP sin previo aviso. El uso de esta extensión queda bajo su propia responsabilidad.

SCA para PHP posibilita a un programador de PHP para escribir componentes reusables, que pueden ser invocados de varias formas, con una interfaz idéntica y con un mínimo de preocupación. Por ahora, los componentes se pueden llamar unos a otros localmente o mediante servicios web, pero en el futuro se espera que sean posibles otras formas. Proporciona al programador una manera de realizar esto, la cual parecerá tan natural como sea posible en PHP.

Los componentes SCA usan anotaciones estilo phpDocumentor (véase http://www.phpdoc.org/) para declarar dependencias sobre otros componentes SCA o servicios Web. El tiempo de ejecución de SCA para PHP resuelve estas dependiencias en tiempo de ejecución en nombre de los componentes, y así permite que el programador de PHP se centre en la lógica de negocio en vez de ubicar y obtener referencias a dependencias.

El modelo de programcación de SCA para PHP se puede ampliar para admitir varios tipos de servicios, como REST y Atompub. Sin embargo, los sevicios web (más exactamente, definidos con WSDL, servicios SOAP/HTTP), son los únicos tipos actualmente especificados.

Los componentes también usan anotaciones para definir la interfaz que exponen como servicio. El tiempo de ejecución de SCA para PHP automáticamete generará WSDL desde estas anotaciones, por lo que un componente SCA se expone con facilidad como un servicio web. Estas anotaciones son una extensión natural de las proporcionadas por phpDocumentor. Implementar un servicio web puede ser tan simple como colocar un componente de PHP bajo la raíz de documentos de un servidor web.

Los componentes también usan anotaciones para especificar estructuras de datos (expresadas usandos tipos complejos de esquemas XML) que son luego manejadas usando Objetos de Datos de Servicio (SDOs).

Un script de PHP que no es un componente SCA y que no contiene anotaciones puede usar los servicios de un componente SCA. Un script o componente de PHP puede realizar llamadas a un servicio web que no sea un componente SCA, pero usando el mismo sistema de llamadas o anotaciones para obtener una referencia.

Primero se mostrará un componente SCA sencillo, ConvertedStockQuote, que ilustra muchas de las características de SCA para PHP. Tiene un método, getQuote(), que, dada una cinta de cotizaciones, obtiene una cotización para tal acción, convertida a la moneda dada. Se usará este ejemplo como base para explicar SCA para PHP a lo largo del resto de este documento.

Ejemplo #1 Un componente SCA sencillo

<?php

include "SCA/SCA.php";

/**
 * Calcular un precio de acción para una clave de pizarra dada en una moneda dada.
 *
 * @service
 * @binding.soap
 */
class ConvertedStockQuote {

    
/**
     * El servicio de tasa de cambio de moneda a usar.
     *
     * @reference
     * @binding.php ../ExchangeRate/ExchangeRate.php
     */
    
public $exchange_rate;

    
/**
     * El servicio de cotización de acciones a usar.
     *
     * @reference
     * @binding.soap ../StockQuote/StockQuote.wsdl
     */
    
public $stock_quote;

    
/**
     * Obtener una cotización de acción para una clave de pizarra dada en una moneda dada.
     *
     * @param string $ticker La clave de pizarra.
     * @param string $currency La moneda al que converitr el valor.
     * @return float El valor de la acción es la moneda dada.
     */
    
function getQuote($ticker$currency)
    {
        
$quote  $this->stock_quote->getQuote($ticker);
        
$rate   $this->exchange_rate->getRate($currency);
        return  
$rate $quote;
    }
}
?>

En este ejemplo se ve que un componente SCA está implementado por un script que contien una clase de PHP y que incluye SCA.php. La clase contiene una mezcla de lógica de negocio y referencias a otros componentes o servicios. En el método ilustrado getQuote() existe solamente lógica de negocio, aunque cuenta con que las variables de instancia $stock_quote y $exchange_rate hayan sido inicializadas. Estas recurren a otros dos componentes que serán inicializados en el tiempo de ejecución de SCA con delegados para estos dos servicios, siempre que se ejecute este componente. Las anotaciones para estos dos servicios muestran un compoente local, que será invocado dentro del mismo periodo de ejecución de PHP, y un componente remoto que será invocado mediante una petición SOAP. Este componente también expone el método getQuote() localmente y como servicio web, por lo que, por turnos, pueden ser invocados tanto local como remotamente.