關於在php中變量少寫了一個$和頁面不斷轉圈的問題排查和vim的自動補全方式

php中的全部變量都是頁面級的, 即任何一個頁面, 最多 都只能在一個文件 : 當前頁面內使用, 不存在跨 文件/ 跨頁面的 做用域的變量!
所以, 即便是 $GLOBALS 這個變量, 雖然叫全局 變量, 可是它也是頁面級的, 在一個頁面內保存的 "全局變量 , " 並不能 帶到 其餘頁面內使用
!!! 這一點 跟java, C ++ 等語言是不一樣的javascript

local: 有兩個含義: 一個是 "本地的, 當地的", 另外一個還有: "局部的, 只在本函數內使用的, 不能出函數的"php

頁面級的 全局變量:html

  • 所謂的全局變量, 是 相對於 函數內的 "局部/ 本地" 變量而言的: 就是 一個頁面內, 凡是 在 函數外部定義的 變量, 就叫 全局變量. 它的做用域: 從 定義該變量起到 文件結尾.
  • 全局變量 從定義開始, 能夠在 腳本中的任意地方使用 (除函數內).
  • 要在 函數內使用全局變量, 有兩種方法 一是使用 形容詞/限定詞: global $all; 而是 使用 特殊變量 (叫 超全局變量! ): $GLOBALS['somevar']
  • 要注意的是, 當使用 global或 $GLOBALS後, 就是使用的 該全局變量自己, 不是使用的 拷貝, 是改變的該全局變量自己, 至關於傳遞的是一個 全局變量的地址!
  • 注意 $GLOBALS的寫法: 不是$_GLOBALS , 沒有 下劃線, 並且必須有sjava

    php的代碼 必須以分號結束, 即便在 if...else語句中, 的大括號裏面 只有一條語句, 也要用 分號結束! 不然會報錯: 意外的 }, 須要 分號或逗號

================================python

關於php中的 字面 字符串!

  • 首先, 一般, php中的字符串是要用 引號括起來的, 可是, 有時候, 若是 你在 php中 忘了寫 單引號 或 雙引號, 那麼 一個字符序列(單詞) 仍然會被 看做是一個字符串!
  • 你能夠經過 php的 gettype(foo); gettype 函數 來 查看 任何結果的 類型! 好比: echo gettype(foo>1); 此時返回的是一個 boolean.mysql

  • 也就是說, 在php中 一個 沒有 加引號的 字符序列是 被容許的! 是被看成一個 "字符串"字面 常量來對待的. 並且還不會被 報錯!!! 這一點 真的是很害人的! 若是不注意, 會引發不少很嚴重的問題的
  • 因此, 若是在 寫變量的時候, 若是保持java, c, c++, js等語言的習慣, 忘了寫$, 那麼這個時候, php不會報錯! 並且會把它做爲一個 "字面"字符串來對待! 而這時候, 若是偏偏又在 循環語句中, 用來 控制 循環結束條件時, 好比寫成 for(i=0; i<count($ret); i++) , 那麼在該循環條件中, 因爲 i是 一個"字面字符串", 並且是合法的,不報錯! i<count($ret) 將被 做爲: "字符串和數字比較" , 參考下面的內容, 其結果 將是一個始終爲true的 條件, 這樣 將會陷入 "死循環"linux

關於 字符串和數字 進行比較的 方法, 參考: http://www.cnblogs.com/youxin/p/3873397.html

  • 字符和字符比較, 字符串和字符串比較, 按常規方法, 可是 若是是 字符串和 數字比較則要注意了!
  • 字符/字符串 和數字 比較, 就不是 比較 字符從Ascii碼了, 而是: 首先 "試圖/嘗試" 着將 字符串 轉換爲數字, 而後按數字大小進行比較; 其次, 若是 該字符串不能轉換爲數字, 即 "若是是 沒法轉換爲數字"的字符串 , 則 把該字符串(包括字面字符串) 看成數字0 來進行比較!

========================================c++

頁面 不斷 轉圈的問題!

  • 若是是本地 服務器(進行localhost進行測試的時候) 頁面一直轉圈, 那麼就只有一種 可能, 並且必定是這個緣由: "頁面 陷入了 死循環! "
  • 由於, 若是是頁面因爲 語法錯誤, 那麼它會 報錯的!
  • 若是不報錯, 又不是由於在生產環境下, 不存在遠程服務器 的網絡傳輸問題,
  • 因此, 在本地服務器機器上, 頁面一直轉圈! 那麼就 不多是由於頁面 執行某些代碼時間 太長的緣由! 那必定是 由於 頁面 邏輯錯誤! 不報錯! , 頁面的某些代碼 : 必定是 陷入了 死循環! 因此 一直執行不完, 一直執行, cpu負荷很高, 因此 死循環致使 頁面一直轉圈!

===================ajax

php的變量不須要 事先定義聲明的?

php的底層C是由一個聯合體union來存儲變量,這個聯合體裏面有各類變量類型,php都以long類型來存儲整型,用hashtable哈西表來存儲數組,由於union能夠存儲各類變量,而且解釋器會自動斷定變量類型,因此php不用聲明變量類型,弱類型
php是弱類型,也即動態語言,在運行時才肯定變量的類型。sql

特別注意的是: php的變量類型 是沒有 undefined! 這一點 不像 javascript! 對於 所謂的 未定義的變量, 其類型是 Null , 不是 undefined , 由於 根本就沒有 undefined的數據類型 , 即便"所謂的未定義" 變量, 其類型 也是 null 由於 php的變量 事先 並不須要 定義!!!! 8種數據類型是: boolean, integer, float(也叫double), string, array, boject, null , resource

參考: http://www.cnblogs.com/leokou/archive/2011/06/01/2067144.html

========================================

雜項

= dialog的內容content/href並非必須的選項 其內容能夠在 dialog調用 顯示方法以前, 調用其餘方法來生成, 填充dialog的內容(好比: $('#dialog').html(..), .append(...)等方法.
== 若是是 使用conent: iframe的話, 這個 iframe標籤中, 是不能直接寫html代碼的, 只能 用src屬性 來指定 內容源.只是要設置 一些其餘屬性,好比 frameborder等:
content: "<iframe scrolling='auto' frameborder='0' src='foo.html' style='width: 100%; height: 100% ;display:block;' ></iframe>"
上面的這個 content: iframe是最經常使用的, 也是 適用於絕大多數狀況下的寫法.
而後再用 $("#diag").dialog('open');

=== 使用 這種iframe的方式時, 在html代碼的div 中, 必須給 div 寫上 easyui-dialog的類屬性, 不然會出不少報錯. 也就是說 在 iframe鎖指定的 源 html/php文件中 , 其div必須是一個 easyui的dialog, 即 div必須有 class="easy-dialog"這個類屬性.

== 回調函數: callback: 簡寫成cb, 是說 發起異步請求時, cb函數 處理的時間 是不肯定的!
關於 異步操做, 最直接的感覺是: 你不知道異步操做何時完成, 也沒有辦法直接獲取到異步操做的結果. 由於 當函數A 在 "異步" 調用 函數B 的時候, 函數A 不等B 返回結果 , 當即順序執行 後面的語句, 直至函數A 退出結束. 也就是說, 若是 你用 js調試跟蹤函數A 的執行時, 調試器是 不會進到 函數 B 的內部去的!!

=== $.ajax 的{..., "async": false,....} 操做默認的是 異步的 , async的屬性老是true, 可是 若是你要 後續操做 要等到 請求完成後才能進行, 即須要鎖死瀏覽器, 就能夠設置 : async: false, 此時, 全部的操做就變成 同步的了. 可是要注意 瀏覽器 鎖死的問題
因而可知, 計算機中的所謂 "同步" , "異步"操做, 實際上就是 一個 "串行,並行"的問題, 同步是指 在一系列的操做步驟a -> b -> c ...中, 操做是依次進行的, 只有當a步驟完成後, 才能執行 b步驟... , 至關於 串行, 電流的串聯電路同樣.... 同步操做中, 就存在 所謂的 "等待/延遲/ 鎖死" 問題. 而 異步就是所謂的 "並行" , 相似於 " 並聯電路" , 電流能夠分多個支路同時進行. 在一些列操做中 a, b, c,d... 步驟b 能夠在執行 a的 或 同時/ 或 以後 或以前 進行, 步驟b跟步驟a的執行 前後時間/順序 關係不大.

===============================

關於vim的自動提示和補全?

  • vim自動補全的插件有不少, 包括: youcompleteme(ycm), autoComplete, omniCppComplete, snipmate, completor, omni-complete, omnifunctionComplete.等等
    可是 從 vim7.1後, vim就自帶了 自動補全和提示了, 因此能夠直接使用其原生的 提示和補全, 而不用安裝其餘外來的插件了。
    自動補全的原理就是:
    將起始字符(或多個起始字符) 相同的單詞, 搜索查找出來, 放在xml或text 臨時緩存起來, 而後將這些內容再顯示在 提示框中。
    不少都 依賴於python組件。

  • vim自帶的補全和提示:
    提示待選框 的位置, 可能在當前提示行的上方, 也可能在當前位置的下方
    提示待選框中的內容,上一次被選擇的 內容項老是出如今 待選框的 最下面那一個, 而後你能夠用 ctrl+p向上移動, 用 ctrl+N向下移動,所有完了以後就顯示 「回到起點」
    vim的狀態欄上, 還有 待選模式/ 待選項目 當前待選項的 各類完整的提示
    待選項能夠 直接上屏, 當獲得待選項後, (如何知道當前是哪一個待選項? 直接看上屏的是哪一個內容的選項? )能夠直接 寫後面接着的 各類代碼內容。

  • 若是 只是直接補全 單詞, 能夠直接使用 (在insert模式下) ctrl+p, 或 ctrl+N (注意n是next, 既然是next向下, 因此它初始化選中的就是第一個待選項, 若是是ctrl+p是向上,因此默認初始化選中的就是最後一個)
    可是 若是要補全 其餘 內容, 好比要補全 整行, 就要使用 ctrl+x( 而後有不少子模式), 好比:^]: 表示tag標籤, ^D 表示define常量, ^L表示補全整行。。。

1. 單詞自動補全:
CTRL+n :當你輸入第一個字母的時候,再CTRL+n,自動出現下拉菜單,單詞默認選中第一個,繼續CTRL+n,CTRL+p能夠上下切換,或者用方向鍵(太慢)
CTRL+p :同上,只是默認的選中的是列表中最後一個單詞
行自動補全:

CTRL+x CTRL+l (l指小寫的L ):兩個命令組合使用。在插入模式下輸入已經存在行的第一個單詞,再按這兩個鍵,就會列出該整行出來
文件名自動補全:

CTRL+x CTRL+f :插入模式下,按這兩個組合鍵,能夠插入當前目錄下的文件名。處用在哪裏呢,固然是有時候咱們要指定默認執行文件的路徑,這樣就方便啦。
字典補全:

首先在~/.vimrc加入以下代碼,注意這是在Linux,windows下應該是C:\Users\$username(用戶名)

    set dictionary-=$VIM/dic.txt dictionary+=$VIM/dic.txt

dic.txt中的單詞一每行一個單詞來分割的
CTRL+x CTRL+k 就能看到dic.txt中定義的單詞的,若是你還麻煩,想直接CTRL+n就顯示其中的列表的話,再配置一下.vimrc文件:

    set complete-=k complete+=k

======

有一個很重要的vim插件: supertab.vmb, 他不改變vim自帶的補全功能, 並且能夠和 vim自帶的補全方式 無縫配合: 在沒有補全可能(提示)的狀況下, 你仍然能夠正常地使用tab。並且 若是是 「單詞補全」 在只有一種可能的狀況下, 直接就給你很差了, 相似於(shell的自動補全功能)。 若是有多種補全可能, 就彈出vim的補全菜單下拉框。

install details:

  1. download supertab.vmb to any directory.
  2. open the file in vim: (命令:vim supertab.vmb)
  3. source the file: (命令: :so %)
    關於 %的用法:在命令行模式下:
    %: 表示完整的包括路徑的 文件所有名稱
    %:h 表示文件的頭部部分, 即文件的路徑;
    %:t 表示文件的尾部部分, 即沒有路徑的文件名
    %:r 表示t去掉擴展名的意思
    %:e 表示文件的擴展名。

omni: 全, 所有, omni-Complete: 全能補全,

參考: https://segmentfault.com/q/1010000004713445

插件地址:https://www.vim.org/scripts/script.php?script_id=1643
下載後,把它放到.vim/plugin目錄就能夠了。

能夠對下面兩個選項進行配置,以調整SuperTab的缺省行爲:

g:SuperTabRetainCompletionType的值缺省爲1,意爲記住你上次的補全方式,直到使用其它的補全命令改變它;若是把它設成2,意味着記住上次的補全方式,直到按ESC退出插入模式爲止;若是設爲0,意味着不記錄上次的補全方式。
g:SuperTabDefaultCompletionType的值設置缺省的補全方式,缺省爲CTRL-P。
你能夠在vimrc中設置這兩個變量,例如:

let g:SuperTabRetainCompletionType = 2
let g:SuperTabDefaultCompletionType = "<C-X><C-O>"

當出現了補全列表選項框後, 要如何操做這個選項框呢?

參考: https://www.cnblogs.com/zhangshuli-1989/p/hq_15_12_18_00_10.html 其中有: ctrl+ y, e, h, l, +字符的含義。
ctrl+n 或ctrl+x ctrl+o是 表示 全能補全 : omni - 補全。

============

vim會根據上下文參數決定使用哪一個命令, 因此 雖然 以so開頭 的命令有多個, 可是若是用 so somesavehistory.vim則會執行這個vim腳本文件, 就等於: source foo.vim

================

在linux下使用 mycli?

  • 實際上, 在 fedora22中, 安裝了 mariadb10.0 後, 就已經自動安裝了 mycli了. 不須要 再額外 安裝 mycli了!
  • mycli須要 python, pygments等的支持, 在 windows中有些問題?
  • mysql的配置文件中, /etc/my.cnf 要單獨的 另外建立一個 節 配置auto-rehash: [mysql] auto-rehash 也能夠實現 mysql的自動補全和auto-completion.
    可是 , mysql 的自動補全沒有 語法 高亮, 也不能 對 關鍵字進行提示和自動補全.

  • 要實現 完整的/全面的功能, 仍是要使用 mycli. 在 ~/.myclirc 配置文件中, 設置...

mycli是以 回車結束語句的, 而mysql是以分號 結束語句的. 因此mycli 要用 exit來退出, 而不能用 exit; 來退出~ 除非設置多行模式: multi_line=True.

  • 剛開始 , 可能有點 不習慣 mycli, 能夠和 mysql兩個 交替使用. 或者, 設置mycli爲 multiple-line多行模式, 這樣就同樣的用 分號來 結束語句了.
相關文章
相關標籤/搜索