搞了一下午什麼回呼函數,匿名函數的,都搞暈了,求方法

來源:互聯網
上載者:User
再學習PHP,學到了函數部分,選擇有點難理解,有木有什麼好的學習方法。

新手看誰的視頻學習呢

回複內容:

再學習PHP,學到了函數部分,選擇有點難理解,有木有什麼好的學習方法。

新手看誰的視頻學習呢

如果你需要的是視頻教程的話,就用 PHP100 吧,比較適合新手的。
地址:http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/6.html
視頻是需要下載觀看的,我貌似還有一份 PHP100 的教程目錄,等會傳到網盤給你。:)
教程目錄傳好了,網盤地址:http://pan.baidu.com/s/1gd87Ti7
你可以根據目錄選擇你需要的內容下載,可能會方便不少。

PHP不懂,打個比喻簡單說下匿名函數,回呼函數的理解吧。
你去學校拿北大錄取通知書,家裡準備張羅著宴請親朋好友,你跟你老爸約定好在你到家前五分鐘時給他一條通知簡訊,告訴你爸收到簡訊後就點鞭炮,並且拿著大紅花在門口等你,你隨手拉了身邊一個人塞給你爸說‘你讓他去點鞭炮,你在門口等我’。在整個過程中:
是主函數,你老爸是你的回呼函數,因為他在等著你的指示去做事情,你給他註冊了一個事件,這個事件就是收到通知簡訊,他收到這個事件後就讓你塞給他的那娃去點鞭炮,這個你連名字都不關注的點炮哥就是匿名函數,你只想讓他能幹完點鞭炮這事兒就行,以後也不會再讓他做其他事情了,所以你也沒必要花心思記住他。
額,簡單的一個類比吧。

匿名函數粗略地說就是沒有名字的函數(PHP 裡的有些特殊,用到外層的變數要 use 聲明。)

回調就是 callback,就是說 call 回去。就是有一個函數 f ,它調用 (call)另一個函數 g 去做一些事情,然後 g call back f,比如告訴它事情做好了或者搞砸了。你可以簡單地理解為 f 委託 g 做一些事,然後 g 向 f 回報結果。

你不管這些概念就已經可以寫出很多 PHP 程式了。建議初學的時候對一些概念可以先稍微瞭解跳過,以後需要用的時候再研究(到時看、寫的代碼多了,又有實際使用情境,會比較好理解

回呼函數就是 —— 告訴你在發生某個事件之後做某個動作,前者是回呼函數的觸發者,後者是回呼函數的內容。
匿名函數就是 —— 現在就需要執行某些動作,而且將來我不必記住這些動作是如何開始執行的(函數名調用)

可以參考javascript嘛

回呼函數,可以理解成函數指標或一個能正確指向回呼函數的一個值,
因為這個回呼函數的方法名稱是什麼沒有任何意義(只是簽名作用),它只需要傳入正確簽名即可,這樣一來,完全就可以匿名,此稱為匿名函數。

建議回呼函數參考 nodejs,匿名函數參考python協助理解。

回呼函數
nodejs有本 nodejs入門經典,可以看看,其中一個例子

var fs   = require('fs'),    http = require('http');http.get({host:'shapeshed.com'}, function(res){    console.log('Got a response from shapeshed.com');}).on('error', function(e){    console.log('There was an error from shapeshed.com');});fs.readFile('foo.js', 'utf8', function(err, data){    if (err) throw err;    console.log('foo.js read');});http.get({host:'www.bbc.co.uk'}, function(res){    console.log('Got a response from www.bbc.co.uk');}).on('error', function(e){    console.log('There was an err from bbc.co.uk');});fs.readFile('hello.js', 'utf8', function(err, data){    if (err) throw err;    console.log('hello.js read');});

運行結果

foo.js readhello.js readGot a response from shapeshed.comAGot a response from www.bbc.co.uk或foo.js readhello.js readAGot a response from www.bbc.co.ukGot a response from shapeshed.com

可以理解io輸出的是回呼函數的內容,他會等到你原本的檔案處理或http請求結束之後的反饋函數,所以輸出順序可能每次不是固定,結構前面幾位朋友講的應該可以協助理解。

匿名函數
可以參考python lambda
lambda x: x * x 相當於一個求 x 平方的函數,但是它沒有顯式的定義函數,但是可以作為一個函數使用。

例如

In [1]: (lambda x:x *x)(3)Out[1]: 9

也可結合map產生一個列表

In [2]: map(lambda x: x + 1, [1, 2, 3])Out[2]: [2, 3, 4]

Ps:對php不太瞭解,語言應該是相通的吧,希望能協助你理解,說的不對或和php不同的地方,也請大家指正。

匿名函數就是把函數當成一個對象,你用一個數字,建立一個數組的時候不需要給其名字吧?那麼函數也不需要。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.