PHP疑問
㈠ php小疑問
echo "\$a + \$b = ".$a+$b;
加、減法的運算優先順序比連字元(.)的優先順序低。
因此此處是先運算了 "\$a + \$b = ".$a,再做加法。
這樣就成了一個字元串加上一個數字。字元串會自動做intval運算,得到0, 所以出來的結果就是$b的值50。
要正確顯示可以加上括弧 :
echo "\$a + \$b = ".($a+$b);
就可以顯示正常的結果:
$a + $b = -50
㈡ php的問題
我也遇到過,不過沒理會!剛剛看到就去查了下為啥呢?還真找到了!轉給你!
相信很多用了mysql很久的人,對這兩個欄位屬性的概念還不是很清楚,一般會有以下疑問:
1、我欄位類型是not null,為什麼我可以插入空值
2、為毛not null的效率比null高
3、判斷欄位不為空的時候,到底要 select * from table where column <> '' 還是要用 select * from table where column is not null 呢。
帶著上面幾個疑問,我們來深入研究一下null 和 not null 到底有什麼不一樣。
首先,我們要搞清楚「空值」 和 「NULL」 的概念:
1、空值是不佔用空間的
2、mysql中的NULL其實是佔用空間的,下面是來自於MYSQL官方的解釋
「NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.」
打個比方來說,你有一個杯子,空值代表杯子是真空的,NULL代表杯子中裝滿了空氣,雖然杯子看起來都是空的,但是區別是很大的。
搞清楚「空值」和「NULL」的概念之後,問題基本就明了了,我們搞個例子測試一下:
CREATE TABLE `test` (
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;
插入數據:
INSERT INTO `test` VALUES (null,1);
mysql發生錯誤:
#1048 - Column 'col1' cannot be null
再來一條
INSERT INTO `test` VALUES ('',1);
成功插入。
可見,NOT NULL 的欄位是不能插入「NULL」的,只能插入「空值」,上面的問題1也就有答案了。
對於問題2,上面我們已經說過了,NULL 其實並不是空值,而是要佔用空間,所以mysql在進行比較的時候,NULL 會參與欄位比較,所以對效率有一部分影響。
而且對表索引時不會存儲NULL值的,所以如果索引的欄位可以為NULL,索引的效率會下降很多。
我們再向test的表中插入幾條數據:
INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');
現在表中數據:
現在根據需求,我要統計test表中col1不為空的所有數據,我是該用「<> ''」 還是 「IS NOT NULL」 呢,讓我們來看一下結果的區別。
SELECT * FROM `test` WHERE col1 IS NOT NULL
SELECT * FROM `test` WHERE col1 <> ''
可以看到,結果迥然不同,所以我們一定要根據業務需求,搞清楚到底是要用那種搜索條件。
---------------------------------
http://blog.csdn.net/eroswang/article/details/8529817
Mysql資料庫是一個基於結構化數據的開源資料庫。SQL語句是MySQL資料庫中核心語言。不過在MySQL資料庫中執行SQL語句,需要小心兩個陷阱。
陷阱一:空值不一定為空
空值是一個比較特殊的欄位。在MySQL資料庫中,在不同的情形下,空值往往代表不同的含義。這是MySQL資料庫的一種特性。如在普通的欄位中(字元型的數據),空值就是表示空值。但是如果將一個空值的數據插入到TimesTamp類型的欄位中,空值就不一定為空。此時為出現什麼情況呢
我先創建了一個表。在這個表中有兩個欄位:User_id(其數據類型是int)、Date(其數據類型是TimesTamp)。現在往這個表中插入一條記錄,其中往Date欄位中插入的是一個NULL空值。可是當我們查詢時,其結果顯示的卻是插入記錄的當前時間。這是怎麼一回事呢?其實這就是在MySQL資料庫中執行SQL語句時經常會遇到的一個陷阱:空值不一定為空。在操作時,明明插入的是一個空值的數據,但是最後查詢得到的卻不是一個空值。
在MySQL資料庫中,NULL對於一些特殊類型的列來說,其代表了一種特殊的含義,而不僅僅是一個空值。對於這些特殊類型的列,各位讀者主要是要記住兩個。一個就是筆者上面舉的TimesTamp數據類型。如果往這個數據類型的列中插入Null值,則其代表的就是系統的當前時間。另外一個是具有auto_increment屬性的列。如果往這屬性的列中插入Null值的話,則系統會插入一個正整數序列。而如果在其他數據類型中,如字元型數據的列中插入Null的數據,則其插入的就是一個空值。
陷阱二:空值不一定等於空字元
在MySQL中,空值(Null)與空字元(』』)相同嗎?答案是否定的。
在同一個資料庫表中,同時插入一個Null值的數據和一個』』空字元的數據,然後利用Select語句進行查詢。顯然其顯示的結果是不相同的。從這個結果中就可以看出,空值不等於空字元。這就是在MySQL中執行SQL語句遇到的第二個陷阱。在實際工作中,空值數據與空字元往往表示不同的含義。資料庫管理員可以根據實際的需要來進行選擇。如對於電話號碼等欄位,可以默認設置為空值(表示根本不知道對方的電話號碼)或者設置為空字元(表示後來取消了這個號碼)等等。由於他們在資料庫中會有不同的表現形式,所以資料庫管理員需要區別對待。筆者更加喜歡使用空值,而不是空字元。這主要是因為針對空值這個數據類型有幾個比較特殊的運算字元。如果某個欄位是空字元,資料庫中是利用欄位名稱來代替。相反,如果插入的是空值,則直接顯示的是NULL。這跟其他資料庫的顯示方式也是不同的。
一是IS NULL 和IS NOT NULL關鍵字。如果要判斷某個欄位是否含用空值的數據,需要使用特殊的關鍵字。其中前者表示這個欄位為空,後者表示這個欄位為非空。在Select語句的查詢條件中這兩個關鍵字非常的有用。如需要查詢所有電話號碼為空的用戶(需要他們補充電話號碼信息),就可以在查詢條件中加入is not null關鍵字。
二是Count等統計函數,在空值上也有特殊的應用。如現在需要統計用戶信息表中有電話號碼的用戶數量,此時就可以使用count函數、同時將電話號碼作為參數來使用。因為在統計過程中,這個函數會自動忽略空值的數據。此時統計出來的就是有電話號碼的用戶信息。如果採用的是空字元的數據,則這個函數會將其統計進去。統計剛才建立的兩條記錄時,系統統計的結果是1,而不是2。可見系統自動將Null值的數據忽略掉了。
判斷NULL用is null 或者 is not null。 sql語句里可以用ifnull函數來處理
判斷空字元串『』,要用 ='' 或者 <>''。sql語句里可以用if(col,col,0)處理,即:當col為true時(非null,及非'')顯示,否則列印0
㈢ 為什麼現在很多人都說,PHP很難找到工作呢
PHP作為一種非常簡單的Web開發語言,與Linux、Apache、MySQL緊密結合,形成了LAMP的開源黃金組合,不僅降低了使用成本,還提高了開發速度,滿足了新型交互網路開發的應用,使得php軟體工程師成為一個快速發展的職業。
據六星教育介紹,PHP語言開發工資不錯。以六星教育為例,學生在六星學習四個月後可以獲得面試機會。他們有的工資在8k左右相當可觀,有的很優秀,有其他語言基礎的工資更高。php如果你想有一個光明的未來,你必須增加員工的數量。雖然有些人最後會被淘汰,但如果你努力,就不會輪到你了。一年內你找不到工作。那些符合工作要求的人已經去工作了。地球上的任何生物,甚至植物,都是競爭激烈的,他們會淘汰那些沒有上進心,沒有求生欲的。只有行業火了,高校才會推出課程,得到高校、大企業、中小企業的認可,順應潮流,提高薪酬上限,整體提升行業薪酬。
㈣ 關於php一點疑問。。。
數組的自動轉換行為目前沒有定義。 //這是重點
<?php
$a = "1"; // $a 是字元串
$a[0] = "f"; // 是字元串偏移量嗎?結果會是什麼?
?>
由於一些歷史原因,PHP 支持通過偏移量進行的字元串索引,這和數組索引的語法一樣。以上的例子就產生了一個問題:$a 應該變成一個第一個元素是「f」的數組呢,還是「f」成了字元串 $a 的第一個字元?
目前版本的 PHP 將以上第二個賦值理解成字元串的偏移量標識,即 $a 變成了 "f",盡管如此,這種自動轉換的地結果應該被認為未定義。PHP 4 引入了新的花括弧語法來訪問字元串的字元,請使用該語法來替代以上的操作:
<?php
$a = "abc"; // $a 為一個字元串
$a{1} = "f"; // $a 目前為 "afc"
?>
㈤ 有關php的疑問
PHP並不是門優秀的語言,但PHP的開源資源很豐富,使用它的最大理由是開源資源。
不要認為依賴框架不好,一個網站不基於框架開發,其可擴展性與維護性會十分差。為什麼要使用框架開發?框架不僅僅是提供各種功能,框架還能讓代碼更標准化。例如我用CI做的一個網站,你如果懂CI的話一接手就知道怎麼對它擴展與維護。
主流的PHP框架很多,CI和thinkphp等都比較簡單,你可以先使用這兩種框架。而且框架有時候不總是只用一種,視項目而定,小站的話用輕量框架很夠用。要是大型而且復雜的項目,使用zend framework這一量級的框架比較好。
框架可以創建出一個系統,但框架不是一個系統,你需要對框架加工才能做出系統。但其實PHP開源系統也不少,如果項目需要快速開發的,還是直接使用開源系統吧。
國內的確有不少CMS,使用起來很容易,對於不懂PHP程序的人來說也很方便。但國內系統的擴展性很差,你需要修改它的後台結構或者加一個功能非常困難。要是你有意要做一個專業的開發人員,你應該使用drupal,drupal是目前最易於擴展的PHP CMS,也是三大CMS之一(wordpress, joomla, drupal)。而且drupal擁有上萬的擴展功能,你想實現某個功能說不定搜索一下就有,寫都不用寫。國內的CMS因為不容易擴展,所以很少出現可安裝的擴展模塊。
㈥ php類疑問
送鮮花和扔雞蛋明顯是動作,而不是對象。已扔鮮花為例,完整的描述是當前用戶對某帖子扔了鮮花。因此一種方式是在用戶對象中增加扔鮮花的方法,另一種方式是在帖子對象中增加被扔鮮花的處理方法。
對於面向對象思想,你可以從現實中映射,沒有不依賴對象而單獨存在的方法,所以很少需要你所說的那種雜類的。
當然,在實際開發中,有一些共性的方法,而我們又發現沒有必要去實現這個對象,那麼可以弄一個工具類來安放它。例如,切分中文字元串,這個方法理論上應該附加給String對象,但是創建一個String對象可能比寫個項目都麻煩,同時大部分方法php都已經內置了,也沒必要非要在String對象中重新來一次,因此放入工具包對象中。
㈦ php拋出異常疑問
這里是系統異常,自動拋出的,而你的做法相當於是捕獲到異常之後有沒做任何處理又把他給拋出了。
相當於這樣:
try{
#1/0;
#等價於
thrownewException('除數為零異常',1);
}catch(Throwable$e){
throw$e;
}
而一般對於異常的做法
try{
#1/0;
#等價於
thrownewException('除數為零異常',1);
}catch(Throwable$e){
#也可以輸出
return$e->getMessage();
}
㈧ 學習PHP的疑問
1:網上源碼不一定符合你的要求與需求。
2:網上的源碼都是一些比較小的項目。
3:大公司對網站性能要求比較高,會開發出一個體系,這也是網上源代碼不能做到的。
4:資料庫設計,資料庫優化 等要求,網上源碼也不一定符合要求。
5:網站的風格也不一定符合你的需求。
6:為了高負載,使用高速緩存,有許多選擇,但是有性能優良之分,所以也不一定符合要求。
總之是為了滿足不同的需要不同的需要。
㈨ 想學PHP,但有一些疑問
嗯,樓主是哪裡人,這個,說話的邏輯有點不習慣。
1、php現在優勢不大了,一是別的語言也發展得很好,比如python、ror、.net、jsp(j2ee)等可以比php做得更好。二是php有一定的局限性,只能用來做web的表層,如果你要用來謀生建議不只學好php,特別要關注python與java。
2、php語言本身是免費的,你用php開發網站zend公司不收費。
discuz、ecshop是別人用php開發出來的產品,分屬兩個公司,並分別注冊了版權。如果你不是用在企業、政府部門而又不用來盈利他們是不會向你收費的,這在他們的公司上有聲明,你盡可以研究、用來改並發布到網上去。但如果你用來掙錢,比如放在網上掛網路、谷歌或別人的廣告就不行了。
3、瀏覽器能看到的是經php編輯器編譯的部份,已經全部轉為html語言了,除非php源碼有漏洞,不然是看不到後台的php源碼的。
另外,php暫時不能開發桌面系統或其它軟體系統,但python、java可以。
㈩ php二次開發流程一些疑問
1,我培訓過,但培訓的不是PHP,培訓機構里老師講的東西都比較簡單+結構化。
2,cms能用到的就很多,網上DEDE
PHPWING
PHP168
都屬於比較火的CMS了。
2次開發,只是在功能上
對程序本身進行優化
加添加新的功能,結構大致不變。
2次開發,也包括一個單位擁有一套成熟的程序,然後利用這套程序做很多程序相同
美工不同的網站賣給不同的客戶。程序結構為核心不變,美工為樣式,只變樣式。
3,一個項目接下來後,美工-程序。最費時間的是客戶提出了很多公司程序不具備的功能,我們進行添加功能。
4,看什麼性質的2次開發了,如果是專業的2次開發,只優化和添加功能,工資相對中等5000+以上。如果是用以上2中說的一套成熟程序做網站當做賣產品,3000+以上。不過大體中,現在的公司都是2者共存的。只能說
哪一者做的更專業寫。2次開發上專業些為主?還是賣產品為主?取決於公司性質。
除美工外掌握的東西很多,JS
XMLDOM
JQUERY
CSS
AJAX
PHP
json
PHP其他摸板技術,等等。
資料庫mysql
sql
等相關其他軟體
編輯器軟體
資料庫操作
軟體
等等。
以上樓主多次說到2次開發,現在的公司大多傾向於
2次開發為輔
,以賣產品為主。
賣產品就屬於
用自己2次開發的程序做出網站
賣給客戶。這樣的公司的技術員,水平不需要太高
會嵌套,CTRL+C
+v
就行懂點語法
函數調用
對象調用就行,因為公司的程序體系已經完善,能完成客戶的所需大部分功能。在賣產品中,客戶肯定是提問題的不是每個客戶都不挑刺得,所以挑了刺,公司的2次開發就會進行了這就是客戶意見後,公司接受然後行動。屬於這樣採納式2次開發。
然後不斷的一值這個循環下去。