I PHP, hvordan å konvertere et argument navn i en streng

stemmer
1

Mitt mål er å ekko argument til en funksjon. For eksempel, hvordan kan dette gjøres?

$contact_name = 'foo';

function do_something($some_argument){
// echo 'contact_name'  .... How???
}

do_something($contact_name);
Publisert på 29/05/2009 klokken 18:32
kilden bruker
På andre språk...                            


9 svar

stemmer
0

Ikke mulig.

Svarte 29/05/2009 kl. 18:37
kilden bruker

stemmer
4

Du kan ikke. Hvis du ønsker å gjøre det, må du bestå navn også, for eksempel:

$contact_name = 'foo';
$contact_phone = '555-1234';

function do_something($args = array()) {
    foreach ($args as $name => $value) {
        echo "$name: $value<br />";
    }
}

do_something(compact('contact_name', 'contact_phone'));
Svarte 29/05/2009 kl. 18:38
kilden bruker

stemmer
0

Variabler er bare betyr å ta opp verdier eller områder i minnet. Du kan ikke få variabelnavnet som er verdi har gått til en funksjon.

Svarte 29/05/2009 kl. 18:46
kilden bruker

stemmer
0

Disclaimer: dette vil oonly fungere hvis du passerer en variabel til funksjonen, ikke en verdi, og det fungerer bare når du ikke i en funksjon eller en klasse. Så bare det globale omfanget fungerer :)

Good funct($var)
Bad funct(1)

Du kan gjøre det faktisk i motsetning til populære tro ^ _ ^. men det innebærer noen oppslags triks med $ Globals variabel.

du gjøre det slik:

$variable_name = "some value, better if its unique";

function funct($var) {
   foreach ($GLOBALS as $name => $value) {
      if ($value == $var) {
         echo $name; // will echo variable_name
         break;
      }
   }
}

Denne metoden er ikke idiotsikker tho. Fordi hvis to variabler har samme verdi, vil funksjonen få navnet på den første den finner. Ikke den du vil ha: P Sitt beste for å gjøre variabelverdien unike før hånd hvis du ønsker nøyaktighet på variabelnavn

En annen metode ville være å bruke referanse for å være nøyaktig like så

$variable_name = 123;

function funct(&$var) {

   $old = $var;
   $var = $checksum = md5(time());  // give it unique value

   foreach ($GLOBALS as $name => $value) {
      if ($value == $var) {
         echo $name; // will echo variable_name
         $var = $old; // reassign old value
         break;
      }
   }
}

så det er fullt mulig :)

Svarte 29/05/2009 kl. 18:53
kilden bruker

stemmer
-3
class Someone{
  protected $name='';
  public function __construct($name){
    $this->name=$name;
  }

  public function doSomthing($arg){
     echo "My name is: {$this->name} and I do {$arg}";
  }
}

//in main
$Me=new Someone('Itay Moav');
$Me->doSomething('test');
Svarte 29/05/2009 kl. 18:54
kilden bruker

stemmer
1

Rett utenfor PHP.net variabler siden:

<?php
  function vname(&$var, $scope=false, $prefix='unique', $suffix='value')
  {
    if($scope) $vals = $scope;
    else $vals = $GLOBALS;
    $old = $var;
    $var = $new = $prefix.rand().$suffix;
    $vname = FALSE;
    foreach($vals as $key => $val) {
      if($val === $new) $vname = $key;
    }
    $var = $old;
    return $vname;
  }
?>
Svarte 29/05/2009 kl. 19:09
kilden bruker

stemmer
0

Basert på PTBNL tallet (mest definitivt riktig) svar kom jeg opp med en mer lesbar (minst jeg tror det) tilnærming:

/**
 * returns the name of the variable posted as the first parameter.
 * If not called from global scope, pass in get_defined_vars() as the second parameter
 *
 * behind the scenes:
 *
 *   this function only works because we are passing the first argument by reference.
 *   1. we store the old value in a known variable
 *   2. we overwrite the argument with a known randomized hash value
 *   3. we loop through the scope's symbol table until we find the known value
 *   4. we restore the arguments original value and
 *   5. we return the name of the symbol we found in the table
 */
function variable_name( & $var, array $scope = null )
{
    if ( $scope == null )
    {
        $scope = $GLOBALS;
    }

    $__variable_name_original_value = $var;
    $__variable_name_temporary_value = md5( number_format( microtime( true ), 10, '', '' ).rand() );
    $var = $__variable_name_temporary_value;

    foreach( $scope as $variable => $value )
    {
        if ( $value == $__variable_name_temporary_value && $variable != '__variable_name_original_value' )
        {
            $var = $__variable_name_original_value;
            return $variable;
        }
    }
    return null;
}

// prove that it works:

$test = 1;
$hello = 1;
$world = 2;
$foo = 100;
$bar = 10;
$awesome = 1;

function test_from_local_scope()
{
    $local_test = 1;
    $local_hello = 1;
    $local_world = 2;
    $local_foo = 100;
    $local_bar = 10;
    $local_awesome = 1;

    return variable_name( $local_awesome, get_defined_vars() );
}
printf( "%s\n", variable_name( $awesome, get_defined_vars() ) ); // will echo 'awesome'
printf( "%s\n", test_from_local_scope() ); // will also echo awesome;
Svarte 29/05/2009 kl. 19:45
kilden bruker

stemmer
0

Sander har det rette svaret, men her er akkurat det jeg var ute etter:

$contact_name = 'foo';

function do_something($args = array(), $another_arg) {
    foreach ($args as $name => $value) {
        echo $name;
        echo '<br>'.$another_arg;
    }
}

do_something(compact(contact_name),'bar');
Svarte 01/06/2009 kl. 19:06
kilden bruker

stemmer
1

Å spore Variabelnavn Du kan kaste og fange unntak. I nest siste linje av spor er om funksjonsnavn og navn på variabler.

Eksempel hvordan bruker denne: http://blog.heintze.pl/2012/01/12/lepszy-var_dump-czyli-przyjemniejsze-debugowanie-php/ å skape bedre Var dump (Lenke til kode: http: //blog.heintze .pl / wp-content / uploads / 2012/01 / bigWeb.zip )

Dessverre - denne artikkelen er bare i polsk på dette tidspunktet.

Svarte 13/01/2012 kl. 08:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more