5 ms·
> Read the following code as if it were a documentation page: If I read this as a documentation page, this makes me scared: `Order::create($validated + ['stat
by azangru 3y ago
> Read the following code as if it were a documentation page:
If I read this as a documentation page, this makes me scared:
`Order::create($validated + ['status' => 'pending']);`
What does it mean to add an array to something?
- Y-bar 3y agoAs someone who likes PHP that stumped me as well, I *really enjoy working with PHP 8.1, but I could not really grok the code either.
- iLoveOncall 3y agoExactly the same as the spread operator in JavaScript or even the exact same syntax in Python, but we don't hear you complaining about those, do we?
- maleldil 3y ago> the exact same syntax in Python No, because the example is showing concatenation of associative arrays. In Python, you'd use a dict, and you can't do `validated + {'status': 'pending'}`: ``` >>> validated = {} >>> validated + {'status': 'pending'} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' ``` You can do `validated | {'status': 'pending'}` since 3.9, though. I think using union or the * operator (e.g. `{*validated, 'status': 'pending'}`) looks less weird, but if you're a PHP programmer, you already know what + does here. In the end, it becomes bikeshedding.
- azangru 3y agoNo complaints about the spread operator :-) But the plus in javascript produces this: [1,2,3] + [1,2,3] // '1,2,31,2,3' (never tried this in js before; so was amused by the result)
- BystanderX 3y agoIt would be shorthand for: `$validated = ['key' => 'value']; $validated['status'] = 'pending'; Order::create($validated);`
- simonhamp 3y agoThis could be rewritten as: Order::create([...$validated, 'status' => 'pending']);
- azangru 3y agoAh, makes sense. Thank you.