В моем методе установки значения display () с использованием статического initPost () и получения всех значений с использованием статического getAll и одного значения с использованием статического метода get (’email’). Когда я проверяю с помощью var_dump (), все в порядке. Я хочу принять мое значение в мой список (). Но я получаю только первую строку каждого значения. Но когда я делаю это без статического метода, получая полное значение в моем списке (). В чем проблема?
public function display()
{
echo "<pre>";
Form::initPost());//initializing value
var_dump(Form::getAll());//Getting all value
var_dump(Form::get('email'));//getting only email value
list($name,$email,$pass,$rpass,$phone)=Form::getAll();//taking value to list
var_dump($name);//Here is the problem .only getting first string from full name
}
Это мой класс формы:
class Form
{
private static $value = array();
public static function initPost()
{
foreach($_POST as $key=>$value)
self::$value[$key] = $value;
}
public static function getAll()
{
return self::$value;
}
public static function get($value){
self::$value = $_POST[$value];
return self::$value;
}
}
// Это раздел ВЫХОД
var_dump(Form::getAll());//Getting all value
array(5) {
["name"]=>
string(12) "Bristi Bella"["email"]=>
string(16) "[email protected]"["pass"]=>
string(6) "123456"["rpass"]=>
string(6) "123456"["phone"]=>
string(6) "123456"}
//Getting email value
var_dump(Form::get('email'));
string(16) "[email protected]"var_dump($name);//only getting first string from full name.But want full name
string(1) "b"
Описанное происходит потому, что по телефону get('email')
вы уничтожили свой массив $ values и установили его в строку с полем электронной почты из вашего пост-запроса. Позвонив list()
на строку он помещает каждый символ строки в вашем списке. Повторяя первый пункт вашего списка, вы получите первый символ.
Вы не должны перезаписывать значение Form :: $ в вашем методе get.
вместо этого извлеките ключ массива из значения Form :: $:
public static function get($value){
return array_key_exists($value,self::$value) ? self::$value[$value] : false;
}
или, по крайней мере, установите только запрошенный индекс следующим образом:
public static function get($value){
self::$value[$value] = $_POST[$value];
return self::$value[$value];
}
И вы не должны извлекать переменные с помощью list (). Пожалуйста, сделайте это так:
$name = Form::get('name');
$email = Form::get('email');
$pass = Form::get('pass');
$rpass = Form::get('rpass');
$phone = Form::get('phone');
Или просто сделайте:
$all = Form::getAll();
echo $all['email'];
echo $all['phone']; // and so on
Наверное, это помогает
class Form {
private static $value = array();
public static function initPost($expectValues = false){
if($expectValues && !count($_POST)){
throw new \Exception ("POST does not have any values");
}
self::$value = $_POST;
}
/**
* use get() to grab all the values or get('key') to grab selected
* value
* @return mixed|array
* @throws \Exception
**/
public static function get($value = null){
if($value === null){
return self::$value;
}
if(!array_key_exists($value,self::$value){
throw new \Exception ("Could not find $value");
}
return self::$value[$value];
}
public function getByPosition($position){
return implode(array_slice($array, $position, 1));
}
}