#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
, но затем ссылаетесь на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
. его работа