1
我目前只是搞亂了PHP,我注意到一些有趣的事情,我個人沒有注意到。匿名函數似乎不適用於對象內部。爲什麼?爲什麼匿名函數似乎被拒絕這個PHP對象
實施例:
$loop = function ($do) {
$i = 2;
$do((object) [
"i" => $i,
"domore" => (function() {
echo "hi";
})
]);
};
$loop(function ($data) {
echo $data->i;
echo $data->domore();
});
引發Error:
2<br />
<b>Fatal error</b>: Uncaught Error: Call to undefined method stdClass::delay() in [...][...]:16
Stack trace:
#0 [...][...](10): {closure}(Object(stdClass))
#1 [...][...](17): {closure}(Object(Closure))
#2 {main}
thrown in <b>[...][...]</b> on line <b>16</b><br />
同樣地,相同的代碼與返回數據作爲一個陣列,而不是一個對象:
$loop = function ($do) {
$i = 2;
$do([
"i" => $i,
"domore" => function() {
echo "hi";
}
]);
};
$loop(function ($data) {
echo $data["i"];
echo $data["domore"]();
});
簡單地返回,如預期的那樣,2hi
。這對我來說似乎很奇怪(來自JavaScript的人),所以我會很感激某種理由。請注意,這些代碼並沒有真正的生活目的,所以好的或壞的練習在這裏沒有任何影響。認爲教育。
編輯: Laravel不正是我想給我的概念,它是不可能的,但我只是在PHP中正確實現它:
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})->get();
那麼,如何laravel實現更乾淨的外觀? – Shawn31313
'語法錯誤,意外'(',期待','或';'' - >'回聲($ data-> domore)();' – icecub
@icecub更新您的php版本 –