downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

com_addref> <DOTNET
Last updated: Fri, 20 May 2011

view this page in

VARIANT

(PHP 4 >= 4.1.0, PHP 5)

VARIANTLa clase VARIANT

$vVar = new VARIANT($var)

Descripción

VARIANT es el equivalente COM de zval de PHP; es una estructura que puede contener un valor con un rango de diferentes tipos posibles. La clase VARIANT porporcionada por la extensión COM permite tener más control sobre la forma en que PHP pasa valores a y desde COM.

Métodos

object VARIANT::VARIANT ([ mixed $value [, int $type [, int $codepage ]]] )

Constructor de la clase VARIANT. Parámetros:

value
valor inicial. si se omite o se establece a NULL se crea un objeto VT_EMPTY.
type
especifica el tipo de contenido del objeto VARIANT. Los valores posibles son uno de los VT_XXX Constantes predefinidas. En versiones de PHP anteriores a PHP 5 se podría forzar a PHP a pasar un objeto variante por referencia usando OR entre VT_BYREF y type. En PHP 5, esta forma no está soportada; en su lugar, PHP 5 puede detectar parámetros pasados por referencia automáticamente; incluso no necesitan ser pasados como objetos VARIANT. Consulte la biblioteca MSDN para información adicional sobre el tipo VARIANT.
codepage
especifica la página de código que se usa para convertir cadenas a unicode. Véase el parámetro con el mismo nombre en la clase COM para más información.

Las versiones de PHP anteriores a PHP 5 definen un número de (no documentado) propiedades virtuales para instancias de la clase VARIANT; todas estas propiedades han sido eliminadas en PHP 5 a favor de su sintaxis más natural; estas diferencias se remarcan mejor con un ejemplo:

Example #1 Ejemplo de Variant, estilo PHP 4.x

<?php
$v 
= new VARIANT(42);
print 
"El tipo es " $v->type "<br/>";
print 
"El valor es " $v->value "<br/>";
?>

Example #2 Ejemplo de Variant, estilo PHP 5

<?php
$v 
= new VARIANT(42);
print 
"El tipo es " variant_get_type($v) . "<br/>";
print 
"El valor es " $v "<br/>";
?>

La razón de este cambio es que, internamente, la extensión COM ve VARIANT, las clases COM y DOTNET son la misma cosa, y la filosofía de diseño de estas clases es que todas los accesos a propiedades y miembros son pasados a través de COM sin interferencia. La nueva sintaxis es más natural y menos costosa, y la mayoría de las propiedades virtuales eliminadas no tienen sentido en un contexto de PHP en ningún caso.

Note:

PHP 5 toma una aproximación mucho más sencilla para manejar VARIANTs; cuando se devuelve un valor o se trae una propiedad variante, la variante es convertida a un valor de PHP sólo cuando es un mapeado directo entre los tipos que no resultarían en una pérdida de información. En los demás casos, el resultado es devuelto como una instancia de la clase VARIANT. Se puede forzar a PHP a convertir o evaluar la variante como un tipo nativo de PHP usando un operador cast explícitamente, o implícitamente converitirla (cast) a una cadena usando print(). Se puede usar el amplio rango de funciones de variantes para realizar operaciones aritméticas sobre variantes sin forzar una conversión o tener riesgo de perder información.

Véase también variant_get_type().



com_addref> <DOTNET
Last updated: Fri, 20 May 2011
 
add a note add a note User Contributed Notes VARIANT
darren at dcook dot org 17-Jul-2007 12:59
If you are frustrated that print_r($obj) (where $obj is something returned from a call to a function on a COM object) does not return anything helpful, and that variant_get_type($obj) just returns a number, the function you are actually after is:
  com_print_typeinfo($obj);

It lists all functions, variables, their types in a human-readable (well, programmer-readable) format. Lovely!
mark dot pearson at capita dot co dot uk 29-Oct-2003 07:51
Running PHP 4.3.2 on Windows 2000 I had to use the following expression to create an empty Variant:

<?php
 $empty
= new Variant(null);
 print
$empty->type //     ==>   1
?>

NOT

<?php
 $empty
= new Variant();
 print
$empty->type //     ==>   0
?>

The two expressions return different Variant type values!
richard dot quadling at carval dot co dot uk 26-Feb-2003 01:50
With thanks to Harald Radi and Wez Furlong.

Some VBA functions have optional parameters. Sometimes the parameters you want to pass are not consecutive.

e.g.

GoTo What:=wdGoToBookmark, Name="BookMarkName"
GoTo(wdGoToBookmark,,,"BookMarkName)

In PHP, the "blank" parameters need to be empty.

Which is ...

<?php
// Some servers may have an auto timeout, so take as long as you want.
set_time_limit(0);

// Show all errors, warnings and notices whilst developing.
error_reporting(E_ALL);

// Used as a placeholder in certain COM functions where no parameter is required.
$empty = new VARIANT();

// Load the appropriate type library.
com_load_typelib('Word.Application');

// Create an object to use.
$word = new COM('word.application') or die('Unable to load Word');
print
"Loaded Word, version {$word->Version}\n";

// Open a new document with bookmarks of YourName and YourAge.
$word->Documents->Open('C:/Unfilled.DOC');

// Fill in the information from the form.
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourName'); // Note use of wdGoToBookmark, from the typelibrary and the use of $empty.
$word->Selection->TypeText($_GET['YourName']);

$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'YourAge');
$word->Selection->TypeText($_GET['YourAge']);

// Save it, close word and finish.
$word->Documents[1]->SaveAs("C:/{$_GET['YourName']}.doc");
$word->Quit();
$word->Release();
$word = null;
print
"Word closed.\n";
?>

The example document is ...

Hello [Bookmark of YourName], you are [Bookmark of YourAge] years old.

and it would be called ...

word.php?YourName=Richard%20Quadling&YourAge=35

Regards,

Richard.
alain at samoun dot com 02-Sep-2001 08:37
<?php
# I think that we need some examples of this thing:
# Lets define a real variant:
$varREAL=  new Variant("9.34 is a real number",VT_R8);
print
"Value:". $varREAL->value; # Will print 9.34
# Now an integer
 
$varINT=  new Variant("9.34 Printed as an integer",VT_INT);
print
"Value:". $varINT->value; # Will print 9
# Now a string
 
$varSTR=  new Variant("9.34 Printed as a string",VT_BSTR);
print
"Value:". $varSTR->value; # Will 9.34 Printed as a string
    
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites