Pregunta

No he hecho mucho de programación en muchos idiomas, pero sé que en C (++), usted tiene que declarar un tipo de variable (int, char, etc).

En PHP que, por supuesto, no tiene que hacer eso. Puede comenzar con $str = "something"; luego $str = array("something" => "smells"); y ella es feliz.

¿Cómo se compila PHP? ¿Cómo sabe cuál es el tipo de variable va a ser? Es más, ¿le importa?

Esta pregunta no tiene relevancia a todo lo que estoy haciendo. Tengo curiosidad.

Editar.

tengo que aclarar esta cuestión un poco.

En C, si digo:

int y;

Se reserva x cantidad de bytes para y. Si se desborda y, malas noticias.

PHP no tiene esta naturaleza (al menos no creo que lo hace).

$i = "a number";
$i = 8;
$i = 1000000000000000000;

Es lo mismo para el idioma. ¿Cómo sabe la cantidad a la reserva? O estoy comparando manzanas con naranjas? Si voy de este mal, ¿tiene alguna temas buenos que puedo leer para entender mejor?

¿Fue útil?

Solución

Dado que usted tiene experiencia C, considere una variable PHP a ser como la siguiente:

typedef struct {
 int varType;
 void* data;
} variable_t;

cuando se crea una nueva variable, se creará un variable_t, se dará una etiqueta de tipo (digamos 1 para int, 2 por cadena), y almacenarlo en algún lugar en una lista (por alcance, referencia por su nombre). El contenido real se almacenarán en *data. Cuando se accede de nuevo la variable, el tipo puede determinarse a partir int varType, y la acción apropiada tomada en void* data, como el uso como un int o cadena.

Imaginemos que el PHP fragmento:

 $data = 12;
 $data2 = $data + 1;
 $data = "Hello";

produce instrucciones como la siguiente (pseudo-CISH):

Line 1:
variable_t* var = new_variable(TYPE_INT, data);
store_variable("data", var);

Line 2:
variable_t* var = get_variable("data2");
if (var->varType == TYPE_INT)
   int value = 1 + *(int*)var->data);
else
   error("Can't add non int");
var = new_variable(TYPE_INT, value);
store_variable("data2", var);

Line 3:
variable_t* var = get_variable("data");
if (var)
  destroy_variable(var);
// Do like line 1, but for TYPE_STRING

Este tipo de trabajos de datos aumentada en lenguajes interpretados bytecoded, compilados o Directa.

Hay más detalles en lo que respecta a las diferentes implementaciones de la máquina virtual (asignación de locales, asignación del montón, regístrese máquinas virtuales, etc.). Si realmente se quiere entender cómo las máquinas virtuales funciona, la mejor referencia es Lua. lenguaje muy limpia, muy limpia código de bytes, y la máquina virtual muy limpio. PHP es probablemente la última aplicación que debería mirar.

Otros consejos

PHP no compila realmente -. Es interpretado (en códigos de operación)

Más o menos si se intenta hacer algo en un determinado tipo de datos que no se puede hacer, te dará un error. No hay ninguna comprobación de tipos.

No se compila. Es un href="http://en.wikipedia.org/wiki/Interpreted_language" rel="nofollow"> interpretado

Me di cuenta que es una vieja pregunta, pero aquí hay alguna información más específica sobre la forma en PHP se encarga de las preguntas formuladas por el PO.

Esta es la página de la referencia de PHP que te gustaría comenzar con:

Introducción a variables

No se prefiere

Yo sé que une sino que enlazan debe ser estable y no quiero a la documentación de referencia PHP copia al por mayor. Éstos son los aspectos más destacados.

  

OP:? ¿Cómo PHP saber qué tipo de variables que utiliza (o hace)

PHP está escrito en C y utiliza un typedef C struct que denomina zval , junto con un typedef C unión que se llama un zval_value para representar todas las variables.

typedef struct _zval_struct {
    zvalue_value value;        /* variable value */
    zend_uint refcount__gc;    /* reference counter */
    zend_uchar type;           /* value type */
    zend_uchar is_ref__gc;     /* reference flag */
} zval;

" Los intentos de motor para encubrir la complejidad del concepto de una variable que puede ser de cualquier tipo, proporcionando un uniforme y conjunto intuitivo de macros para acceder a las estructuras de diversos campos ".

"PHP es un proceso dinámico, lenguaje de programación relajado escrito, que los usos copy-on-write y el recuento de referencias." Conteo de referencia y de copia en escritura (CP) son dos potentes aplicaciones PHP conceptos que no voy a entrar aquí, pero vale la pena leer sobre.

" tipificación débil es implícito de la preferencia del motor para convertir, o variables de obligarle a del tipo requerido en el momento de ejecución . Recuento de referencia es el medio por el cual el motor puede deducir cuando una variable ya no tiene las referencias contenidas en el código de los usuarios, y por lo tanto es capaz de liberar las estructuras asociadas con la variable ".

" El zval_value es una unión que puede representar todo tipo de una variable puede contener. "

" ... una variable puede ser de un tipo, los datos variables está representado por el campo apropiado en la unión zval_value. El zval sí mantiene el tipo, número de referencia y una bandera para indicar si una variable es una referencia. "

  

¿Cómo PHP compilación?

"Compilar" es una palabra amplia que puede tener diferentes significados y PHP no compila en el sentido tradicional. Que sí hace una especie de pre-compilación que convierte el código fuente en códigos de operación que son las instrucciones que pueden ser ejecutadas por el procesador. Estos códigos de operación se almacenan en caché que evita que PHP desde tiene que analizar con frecuencia llamados guiones.

  

¿Cómo sabe cuál es el tipo de variable va a ser? Es más, ¿le importa?

Como ya se ha citado anteriormente, es " preferencia para convertir, o las variables coaccionan para el tipo requerido en el momento de ejecución ." Del motor de PHP Baiscally PHP no siempre almacenar lo que determina el tipo de una variable sea cuando se crea una variable pero cuando se hace referencia a PHP hace otra determinación de qué tipo se basa en el contexto en el que se está utilizando.

" PHP se escribe débilmente, como tal, el motor proporciona funciones de API para la conversión de las variables de un tipo a otro. "

El motor tiene un conjunto de macros que utiliza para trabajar con los Zvals para convertir el tipo de una variable de modo que por lo general no tiene que lidiar con eso.

Si quieres ver lo que Zvals mirada al igual que en la acción que pueden desecharse con:

debug_zval_dump($variableName);

"¿Cómo PHP compilación? ¿Cómo sabe cuál es el tipo de variable va a ser? Es más, ¿le importa?

Esta pregunta no tiene relevancia a todo lo que estoy haciendo. Tengo curiosidad. "

PHP es un lenguaje interpretado y no compila.

PHP no sabe de qué tipo es la variable que va a ser, porque el tipo de la variable es determinada por el tipo de valor que se asignó última vez a esa variable.

Usted puede hacer esto:

$foo = 5;
var_dump($foo);
$foo = "5";
var_dump($foo);
$foo = array();
$foo[] = 0;
$foo[] = 1;
$foo[] = 2;
var_dump($foo);

Como se puede ver, cada vez que se asigna un valor a foo, el tipo podría ser cambiado.

PHP no importa el tipo de la variable, porque es un lenguaje de programación y no tiene sentimientos.

EDIT:

"O estoy comparando manzanas con naranjas?"

Sí, lo eres. Aquí se puede aprender más sobre la lengua.

Edit2:

PHP es un lenguaje de script con un intérprete y sin un compilador. Esto significa que en PHP que sólo pueden obtener los errores de ejecución. Es un lenguaje liberal si tenemos en cuenta los tipos, porque usted tiene el derecho de hacer cualquier cosa con sus variables y se modificaron sus tipos según el uso de ellos.

Estos enlaces podría ser útil para usted:

http://www.gidforums.com/t-11866.html

http: // www .webmaster-talk.com / coding-foro / 186350-fundamentales-diferencias-entre-php-cc.html

Variable

diferencia entre el alcance de PHP y C:? ámbito de bloque no es exactamente la misma

Tenga en cuenta, que PHP se ejecuta en el servidor, si desea crear eventos de cliente, JavaScript es mi sugerencia.

PHP es ahora compatible con el tipo dando a entender, que puede incluir cosas como 'cadena' o 'array' en la definición de funciones que son capturados como los scripts son interpretados para indicar que hay un tipo de desajuste.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top