我在php OOP中非常新,而且我使用laravel有我选择的框架。我创建一个对象用户并创建记录,我唯一要做的就是检查我的一个输入字段(不是必需的)是否已设置,如果设置的是我必须在用户对象中添加,但是如何我可以在现有对象中添加此属性(手机)和值,我做得对吗?
代码:
$user = User::create([
'email' => $userDat['email'],
'name' => $userDat['name'],
'surname' => $userDat['surname'],
]);
if (isset($userDat['mobilephone'])) {
$user->mobilephone = $userDat['mobilephone'];
}
答案 0 :(得分:0)
如果你必须将属性添加到对象中,我相信你可以将它作为一个数组转换,添加你的属性(作为一个新的数组键),然后将它作为一个对象强制转换。你唯一一次遇到stdClass对象(我相信)就是当你把一个数组作为一个对象或者你从头开始创建一个新的stdClass对象时(当然还有你json_decode()的东西 - 愚蠢的我忘了!)。 / p>
而不是:
print.AsIs
你会这样做:
class(I(3))
#[1] "AsIs"
或者如果您已经有一个现有的stdClass对象:
$foo = new StdClass();
$foo->bar = '1234';
另外作为1班轮:
$foo = array('bar' => '1234');
$foo = (object)$foo;
或者你可以这样做
$foo = (array)$foo;
$foo['bar'] = '1234';
$foo = (object)$foo;
答案 1 :(得分:0)
有几种方法可以做到。
提前准备阵列
$data = [
'email' => $userDat['email'],
'name' => $userDat['name'],
'surname' => $userDat['surname'],
];
if ($phone = array_get($userDat, 'mobilephone')) {
$data['mobilephone'] = $phone;
}
User::create($data);
首先创建对象然后保存它
$user = new User([
'email' => $userDat['email'],
'name' => $userDat['name'],
'surname' => $userDat['surname'],
]);
if ($phone = array_get($userDat, 'mobilephone')) {
$user->mobilephone = $phone;
}
$user->save();
目前正在进行,但需要额外查询(建议不要使用)
$user = User::create([
'email' => $userDat['email'],
'name' => $userDat['name'],
'surname' => $userDat['surname'],
]);
if ($phone = array_get($userDat, 'mobilephone')) {
$user->mobilephone = $phone;
$user->save();
}
答案 2 :(得分:0)
如何在现有对象中添加此属性(手机)和值,我做得对吗?
这在很大程度上取决于您使用的框架。通常,您可以向PHP中的任何对象添加任意属性(这并不意味着您总是应该)。
在您的情况下,您使用的是Laravel附带的Eloquent框架,实际依赖动态分配的对象属性绝对正确使用 。这在official documentation中有详细记录。请注意,您可能需要在某个时刻调用$user->save()
来实际保存您的用户对象(感谢Ben的提示)。
请注意,您也可以通过以下方式分配User
实例的所有属性:
$user = new User();
$user->email = $userDat['email'];
$user->name = $userDat['name'];
$user->surname = $userDat['surname'];
if (isset($userDat['mobilephone'])) {
$user->mobilephone = $userDat['mobilephone'];
}
$user->save();