2012-09-22 19 views
7

que se maravillaron cuando probé el siguiente código de hoy:¿Cómo exactamente PHP logra variables 'dinámicas'?

$star = "Aquarius"; 
$star = 11; 

Durante la depuración, he observado que $star simplemente cambia de string tipo de integer tipo. Me sorprendió esta funcionalidad. En C++, por ejemplo, esto es simplemente imposible, pero en C# consideré la variable var pero no es lo mismo.

Por ejemplo no se puede hacer:

var dynamic = "Hello"; 
dynamic = 3; 

empecé a preguntarme lo que sucede exactamente en el punto en el que, básicamente, digo estrellas $ = 11. Mi conjetura es que es simplemente $star reinician ya que es estar directamente asignado a (pero esto parece raro ya que el intérprete ya sabe que una variable $star se ha declarado antes). ¿Alguien puede ayudar con alguna explicación clara respaldada por la fuente oficial explicación?

Gracias.

Respuesta

7

En C/C++ tipo se define en tiempo de compilación debido a los tipos de optimización que se pueden producir en base a ella.

En C# el compilador infiere el tipo basado en el contexto y en el cerebro de los compiladores, sustituye la palabra clave var por el tipo. Es por eso que no puede cambiar el tipo después de que el compilador realizó la inferencia inicial.

En lenguajes de scripting como PHP, una variable es una entrada a un mapa Hash (matriz asociativa, una tabla de símbolos). Esto define el espacio de nombre (y el alcance). La parte de valor real es un tipo de objeto genérico que almacena tanto el valor como el tipo.

+0

Wow, muy bien. Entonces, ¿significa que en C# una variable nunca se almacena realmente como un tipo de objeto * genérico? ¿Y es posible que pueda proporcionar alguna fuente en la que pueda obtener más información? gracias – rtuner

+1

C# es un lenguaje para el código de byte de salida para ejecutar en una máquina virtual. El 'tipo de objeto genérico' al que me refería en el ejemplo de PHP no es más que una 'estructura de lenguaje C' con 2 miembros (simplifico un poco al decir esto). Más fuentes es difícil ya que combina conceptos de 3 diferentes tipos de idiomas (uno para código ensamblador, uno para código byte y uno para ejecución interpretada). –

0

PHP es un lenguaje dinámico, similar en espíritu a Perl, Ruby, Python, o muchos otros. C++, por otro lado, está compilado y tipado estáticamente, requiriendo que cada variable tenga un tipo definido en tiempo de compilación.

Comprobar la documentación de PHP para un gran conocimiento para la implementación tipado dinámico de PHP: http://php.net/manual/en/language.types.type-juggling.php

+0

no creo que esto es exactamente lo que estaban buscando ... –