[英]PHP how to assign class property variables conditionally
我是php类,数组等的新手,所以如果我不使用正确的术语,请原谅。 我正在寻找的是如何轻松地为类中的属性赋值,而不必依赖于“if”语句。
例如:
假设我有一个类测试的实例,“test”有一个属性“employee”(希望这是调用它的正确方法),而employee是一个复杂的类型。
所以,我有类似的东西:
$test -> employee = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc)
我在这里遇到的问题是,如果“年龄”,“性别”,“国籍”等并不总是存在,我只想在分配某些东西时为它们分配值,我不想使用If的对于每个非空值组合......(这是一个简短的例子,但我有很多这些属性或者它们被称为什么,太多“如果”组合太乱了)......
我稍后将这些值作为soap请求发送,我不想要任何空的xml标签......
如果我的术语不正确,我很抱歉,但我希望我已经足够清楚了解那里有人来帮助我!
提前谢谢,巴勃罗
在这种情况下你可以做什么:
setEmployee
。 这是一些示例代码; 试试这个:
<?php
class test{
private $employee;
public function setEmployee($age,$sex,$nationality,$maritalstatus){
$this->employee=array('Age'=>$age,
'Sex'=>$sex,
'Nationality'=>$nationality,
'MaritalStatus'=>$maritalstatus);
}
public function getEmployee(){
return $this->employee;
}
}
$t=new test();
$t->setEmployee('32','M','American','Married');
print_r($t->getEmployee());
?>
这个怎么样:
$array = array('Age' => '30' , 'Sex' => $sex, 'nationality' => $nationality, 'maritalstatus' => $status);
foreach ($array as $key => $value) {
if (is_null($value) || $value=="") {
unset($array[$key]);
}
}
$test->employee = $array;
你考虑过一个简短的三元解决方案吗?
'Sex' => ( isset($sex) ? $sex : "n/a" )
这基本上是执行if-else
逻辑,但不是那么冗长。 我们的条件是isset($sex)
。 如果这是真的,我们返回$sex
,否则我们返回"n/a"
。 无论返回什么,都会成为'Sex'
的价值。
如果这还不够,我建议您在实例化期间要求有效值。 如果用户未提供正确和期望的值,请拒绝实例化该类。
$temp_array = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc);
foreach($temp_array as $key => $val){
if(!$temp_array[$key]){
unset($temp_array[$key];
}
}
如果你需要接受FALSE
作为值,那么请改用:
$temp_array = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc);
foreach($temp_array as $key => $val){
if($temp_array[$key] !== NULL){
unset($temp_array[$key];
}
}
编辑:这可确保最终数组中只存在具有非null或非falsey值的键。
一种方法是将可能的密钥存储在一个数组中 - 然后你可以迭代它,每个数组只需要一组控制代码:
$keys = array('Age', 'Sex', 'Nationality');
foreach ($keys as $key) {
if ( isset($inputs[$key]) )
$test->employee[$key] = $inputs[$key];
}
我对你的问题感到困惑。 诸如$ sex,$ nationality等变量是不是总是被定义,或者它们有时被设置为null? 如果这些变量并不总是存在,则必须首先检查它们的存在,并且没有办法解决这个问题 - 除非你重构早期的代码。
我假设变量确实存在,你只是不想保存NULL情况。
OOP方法可能是使用数据封装 - 这种情况的常见选择。 应对测试类进行以下更改。
class test {
protected $employee = array();
public function getEmployee() {
return $this->employee;
}
public function setEmployee($employee) {
foreach ($employee as $key => $value) {
if ($value !== null) { // or any value it should not be
$this->employee[$key] = $value;
}
}
}
...
另一种方法是将employee作为自己的对象引入,并在其对象中使用机制来跳过null值。 您可以覆盖__set,再次使用数据封装,获取__construct参数或其他各种解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.