Varun Sridharan
Varun Sridharan

Reputation: 1978

Pass Dynamic Values from one function to another function in class

Hi all i have a function in a class which will print all the variable pass for this function

Class Code :

<?php
 class MyPrintClass {
   public function printVaraible() {
     var_dump(func_get_args())
   }
 }

 $printVar = new MyPrintClass;
?>

if i use like below its correctly working and printing all the values pass.

$print->printVaraible('value1','Value2',20);

The output i got for above cmd

array (size=1)
  0 => string 'value1' (length=6)
  1 => string 'value2' (length=6)
  2 => string 'value3' (length=6)

if i use like blow its showing as a single array.. i want the value seperated.. how its possible ?

function getVal(){
  global $printVar;
  $print->printVaraible(func_get_args());
}

I need to pass the value like below

getVal('value1','Value2',20);

and i need the output as

array (size=1)
  0 => string 'value1' (length=6)
  1 => string 'value2' (length=6)
  2 => string 'value3' (length=6)

Currently i get NULL as the output

Updated Question Based On the Answer Given By deceze ** I Also had a small change in my code** Class Code :

<?php
  class MyPrintClass {
    public function printVaraible($tag,$value) {
      echo $tag.' == '.$value;
      var_dump(func_get_args());
    }
  }

  $printVar = new MyPrintClass;
?>

Converted Class To Function By

<?php
function getVal($tag,$value) {
 global $printVar;
 call_user_func_array([$printVar, 'printVariable'], $tag,$value,func_get_args());
}

?>

If i try to use it as below i get error

<?php getVal('first','second','third,'fourth'); ?>

Warning: call_user_func_array() expects exactly 2 parameters, 4 given

Upvotes: 0

Views: 145

Answers (2)

ArtisticPhoenix
ArtisticPhoenix

Reputation: 21671

Your getting null in the return because you never return anything, from the functions above.

if you want to call a class method I suggest you look into Refection or you can also do

$a = 'printVaraible';

$class->$a(1,3); //

besides using call_user_func_array, I would also suggest looking into closures (php > 5.3 ), which will let you write them this way.

$a = function foo(){ echo 'foo'};
$a();

Last thing I would generally avoid using global, as it obscures in your code where the values come from. It is always better to inject values into the function scope and not mix that with the global, imaging hunting that global down in a large project, I just avoid them at all cost and forget they exist.

Upvotes: 1

deceze
deceze

Reputation: 522175

call_user_func_array([$print, 'printVariable'], func_get_args());

This calls the function with separate parameters from an array. I'd question the usefulness of this though, since you'll just end up with an array from func_get_args anyway. Why not pass arrays around in the first place?

Upvotes: 1

Related Questions