Передача динамических значений из одной функции в другую функцию в классе

#php

#php

Вопрос:

Привет всем, у меня есть функция в классе, которая будет печатать все переменные, передаваемые для этой функции

Код класса :

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

 $printVar = new MyPrintClass;
?>
  

если я использую, как показано ниже, он правильно работает и печатает все передаваемые значения.

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

Результат, который я получил для приведенного выше cmd

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

если я использую like blow, он отображается как единый массив .. я хочу, чтобы значение было разделено.. как это возможно?

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

Мне нужно передать значение, как показано ниже

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

и мне нужен вывод в виде

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

В настоящее время я получаю NULL в качестве вывода

Обновленный вопрос, основанный на ответе, данном deceze ** У меня также было небольшое изменение в моем коде** Код класса:

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

  $printVar = new MyPrintClass;
?>
  

Преобразованный класс в функцию с помощью

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

?>

Если я попытаюсь использовать его, как показано ниже, я получу ошибку

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

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

Комментарии:

1. Вы используете global $printVar , но затем ссылаетесь на $print …!?

2. @deceze его ошибка ввода, но я получил вывод из вашего ответа

Ответ №1:

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

Это вызывает функцию с отдельными параметрами из массива. Я бы поставил под сомнение полезность этого, поскольку в любом случае вы просто получите массив из func_get_args . Почему бы не передавать массивы в первую очередь?

Комментарии:

1. я использовал это, но я получаю return null в качестве значения

2. когда я вызываю функцию в своем классе, я получаю null в качестве возвращаемого значения, пожалуйста, проверьте мой обновленный вопрос

Ответ №2:

Вы получаете null в возврате, потому что вы никогда ничего не возвращаете из функций выше.

если вы хотите вызвать метод класса, я предлагаю вам заглянуть в Refection или вы также можете сделать

 $a = 'printVaraible';

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

помимо использования call_user_func_array, я бы также предложил изучить замыкания (php> 5.3 ), что позволит вам записать их таким образом.

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

Последнее, что я бы вообще избегал использовать global, так как это скрывает в вашем коде, откуда берутся значения. Всегда лучше вводить значения в область действия функции, а не смешивать их с глобальными, визуализируя поиск этого глобального значения в большом проекте, я просто избегаю их любой ценой и забываю, что они существуют.

Комментарии:

1. спасибо за ваш ответ, как вы сказали добавить return in function . его работа