Lo que hace este código significa? ¿Es esta la forma de declarar un puntero en php?

$this->entryId = $entryId;
  • esta es la forma de iniciar una variable, -> es equivalente al operador punto en java
  • $this sólo se refiere a la corriente el ámbito de la clase para acceder a las variables disponibles en ese contexto $entryId sería variable accesible en el contexto local o que se pasa como parámetro
  • Usted debe buscar en primer lugar cuál signo de dólar en php medios.
InformationsquelleAutor | 2009-04-14

9 Comentarios

  1. 157

    Los nombres de las variables en PHP comienza con $ así $entryId es el nombre de una variable.
    $esta es una variable especial en la programación Orientada a Objetos en PHP, que es la referencia al objeto actual.
    -> se utiliza para acceder a un miembro de objeto (como las propiedades o métodos) en PHP, como la sintaxis de C++.
    por lo tanto el código significa esto:

    Lugar el valor de la variable $entryId en el campo entryId (o propiedad) de este objeto.

    El & operador en PHP, significa pasar de referencia. Aquí está un ejemplo:

    $b=2;
    $a=$b;
    $a=3;
    print $a;
    print $b;
    //output is 32
    
    $b=2;
    $a=&$b; //note the & operator
    $a=3;
    print $a;
    print $b;
    //output is 33

    En el código anterior, debido a que utiliza & operador, una referencia al lugar donde $b está señalando es almacenado en $a. Por lo que $a es en realidad una referencia a $b.

    En PHP, los argumentos se pasan por valor por defecto (inspirado por C). Así que cuando se llama a una función, cuando se pasa en sus valores, que son copiados por valor y no por referencia. Este es el valor predeterminado EN la MAYORÍA de las SITUACIONES. Sin embargo, hay una manera de pasar por referencia de comportamiento, cuando la definición de una función. Ejemplo:

    function plus_by_reference( &$param ) {
          //what ever you do, will affect the actual parameter outside the function
          $param++;
    }
    
    $a=2;
    plus_by_reference( $a );
    echo $a;
    //output is 3

    Hay muchas funciones incorporadas que se comportan como esta. Como la función sort() que ordena una matriz afectarán directamente en la matriz y no devuelve otra matriz ordenada.

    Hay algo interesante notar, sin embargo. Porque pasar-por-el modo de valor pudiera resultar en el uso de la memoria, y PHP es un lenguaje interpretado (por lo que los programas escritos en PHP no son tan rápidos como los programas compilados), para hacer que el código se ejecute más rápido y minimizar el uso de memoria, hay algunos ajustes en el intérprete de PHP. Uno es perezoso-copia (no estoy seguro del nombre). Que significa esto:

    Cuando usted está enfrentando una variable en otra, PHP se copia una referencia a la primera variable en la segunda variable. De forma que la nueva variable, es en realidad una referencia a la primera de ellas hasta ahora. El valor no es copiado todavía. Pero si tratas de cambiar cualquiera de estas variables, PHP hará una copia del valor y, a continuación, los cambios de la variable. De esta manera usted tendrá la oportunidad de guardar la memoria y el tiempo, SI NO CAMBIA EL VALOR.

    Así:

    $b=3;
    $a=$b;
    //$a points to $b, equals to $a=&$b
    $b=4;
    //now PHP will copy 3 into $a, and places 4 into $b

    Después de todo esto, si desea colocar el valor de $entryId en ‘entryId’ propiedad de su objeto, el código de arriba va a hacer esto, y no se copia el valor de entryId, hasta que cambie cualquiera de ellos, los resultados en menos uso de memoria. Si realmente quieres tanto a punto para el mismo valor, a continuación, utilizar esta:

    $this->entryId=&$entryId;
    • Así hay punteros en PHP como en C++? Variables y la referencia a las variables están bien, pero ¿qué hay de los punteros?
    • ok, ahora vamos a tener una referencia. es posible el aumento de la referencia, de modo que se apuntan a la siguiente parte en la memoria? yo.e: $a=array(1,2); $b=&$a[0]; &$b++; //now the $b points to $a[1] ? esto significaría un verdadero trabajo con punteros a mí. es un consctruct o similar posible?
    • Los objetos se pasan siempre por referencia!
    • Vale la pena destacar que en C++ que el -> operador en realidad es sólo azúcar sintáctico para eliminar la referencia y el acceso a la propiedad (*myObject).property es equivalente a myObject->property. Desde php no tiene realmente un puntero en C++ (php referencias en lugar de la -> operador en php no significa exactamente lo mismo en c++. No se puede utilizar (*$miobjeto).propiedad en lugar de -> en php.
  2. 27

    No, Como otros dicen, «no Hay ningún Puntero en PHP.» y yo añado, no hay nada RAM_related en PHP.

    Y también todas las respuestas son claras. Pero no fueron los puntos a la izquierda que no me pude resistir!

    Hay una serie de cosas que actúa de manera similar a los punteros

    • eval construir (mi favorito y también peligroso)
    • $GLOBALS variable
    • Extra símbolo » $ » Antes de Variables (Como prathk mencionado)
    • Referencias

    Primero

    Al principio he de decir que PHP es realmente potente idioma, sabiendo que no es un constructo denominado «eval», así que usted puede crear su código PHP, mientras que lo de correr! (genial!)

    aunque existe el peligro de PHP_Injection que es mucho más destructivo que SQL_Injection. ¡Cuidado!

    ejemplo:

    Código:

    $a='echo "Hello World.";';
    eval ($a);

    Salida

    Hola Mundo.

    Así que en lugar de utilizar un puntero para actuar como otra Variable, Puede Hacer que Una Variable Desde Cero!


    Segundo

    $GLOBAL variable es bastante útil, Usted puede tener acceso a todas las variables mediante el uso de sus claves.

    ejemplo:

    Código:

    $three="Hello";$variable=" Amazing ";$names="World";
    $arr = Array("three","variable","names");
    foreach($arr as $VariableName)
        echo $GLOBALS[$VariableName];

    Salida

    Hola Mundo Asombroso

    Nota: Otros superglobales puede hacer el mismo truco en escalas más pequeñas.


    Tercera

    Usted puede agregar tanto como ‘$’s que quiere antes de una variable, Si usted sabe lo que está haciendo.

    ejemplo:

    Código:

    $a="b";
    $b="c";
    $c="d";
    $d="e";
    $e="f";
    
    echo $a."-";
    echo $$a."-";   //Same as $b
    echo $$$a."-";  //Same as $$b or $c
    echo $$$$a."-"; //Same as $$$b or $$c or $d
    echo $$$$$a;    //Same as $$$$b or $$$c or $$d or $e

    Salida

    b-c-d-e-f


    Último

    De referencia que están tan cerca de los punteros, pero es posible que desee comprobar en este enlace para más aclaración.

    ejemplo 1:

    Código:

    $a="Hello";
    $b=&$a;
    $b="yello";
    echo $a;

    Salida

    yello

    ejemplo 2:

    Código:

    function junk(&$tion)
    {$GLOBALS['a'] = &$tion;}
    $a="-Hello World<br>";
    $b="-To You As Well";
    echo $a;
    junk($b);
    echo $a;

    Salida

    -Hola Mundo

    -Como Bien

    Espero Que Ayude.

    • Muchas gracias por ese post, verdadera joya. Yo estaba perdido con múltiples $ a pesar de que, pero he encontrado una buena explicación de lo que hace – stackoverflow.com/questions/2715654/what-does-mean-in-php
    • Gran Explicación! (Y)
    • el día de hoy vemos que PHP desarrolladores no han estudiado C++ … así que no hable de puntero o referencia de programación si usted nunca ha estudiado C++, debido a que C++ es el langague donde los conceptos se han creado/implementado para la 1ª y única vez .
  3. 9

    Que la sintaxis es una manera de acceder a un miembro de la clase. PHP no tiene punteros, pero tiene referencias.

    La sintaxis que estás citando es básicamente el mismo que el acceso a un miembro de un puntero a una clase en C++ (mientras que la notación de punto se utiliza cuando no es un puntero.)

  4. 4

    Para responder a la segunda parte de tu pregunta, no hay punteros en PHP.

    Cuando se trabaja con objetos, generalmente se pasa por referencia en lugar de por valor de – en cierta forma, este funciona como un puntero, pero en general es completamente transparente.

    Esto depende de la versión de PHP que está utilizando.

    • Pasando de objetos todavía es, en general, por el valor en PHP. Variables de PHP en realidad nunca han objetos como sus valores tienen referencias a objetos. Cuando se pasa una variable de objeto a una función de dos variables, ambos de los cuales tienen el mismo valor, y ese valor es una referencia a un objeto. El hecho de que hay referencias es sólo acerca de cómo las variables de trabajo en PHP, no para aprobar. Usted puede reasignar la variable dentro de la función sin cambiar la variable fuera. Estoy ignorando la antigua versión de php 4 a continuación.
  5. 2

    entryId es una propiedad de instancia de la clase actual ($this)
    Y $entryId es una variable local

  6. 2

    Sí, hay algo similar a los punteros en PHP, pero puede no coincidir con lo que ocurre exactamente en c o c++.
    Siguiente es un ejemplo de los.

    $a = "test";
    $b = "a";
    echo $a;
    echo $b;
    echo $$b;
    
    //output
    test
    a
    test

    Ilustra este concepto similar al de los punteros en el PHP.

    • ¿Cómo funciona este ilustrar los punteros? Esto no demuestra nada de lo que el OP frecuentes (al menos no para mí)….
  7. 2

    Puede simular punteros a instancias de objetos en algún grado:

    class pointer {
       var $child;
    
       function pointer(&$child) {
           $this->child = $child;
       }
    
       public function __call($name, $arguments) {
           return call_user_func_array(
               array($this->child, $name), $arguments);
       }
    }

    Uso como esta:

    $a = new ClassA();
    
    $p = new pointer($a);

    Si pasa $p alrededor, se comportará como un C++ puntero sobre el método de las llamadas (no se puede tocar variables de objeto directamente, sino que es el mal de todos modos 🙂 ).

  8. 0

    PHP pasa Arrays y Objetos por referencia (punteros). Si desea pasar una variable normal Ex. $var = ‘boo’; a continuación, utilice $boo = &$var;.

  9. 0

    PHP puede usar algo como punteros:

    $y=array(&$x);

    Ahora $y actúa como un puntero a $x y $y[0] elimina referencias a un puntero.

    El valor de la matriz(&$x) es sólo un valor, por lo que puede ser pasada a las funciones, almacenados en otras matrices, copiado de otras variables, etc. Usted puede incluso crear un puntero a esta variable puntero. (Serializar se rompa el puntero, sin embargo.)

    • uhhhhhhhhh, no. $ php -r ‘$x = 1; > $y = array(&$x); > var_dump($y); > $x = 2; > var_dump($y); > $y[0] = 3; > var_dump($x);’ //// Salida: array(1) { [0]=> &int(1) } array(1) { [0]=> &int(2) } int(3)

Dejar respuesta

Please enter your comment!
Please enter your name here