PHP學習筆記(23)PHP的數據類型與常量使用(24)PHP的運算符與表達式

23   、PHP的數據類型與常量使用

1、數據類型之間的相互轉換

一種是強制轉換:setType(變量,類型)://類型int,integer,float,double,real,bool,boolena,string,array,object

                       這個函數將原變量的類型改變,var     dump();

一、原類型發生轉換:

(1)$str="100.12345abc"

setType($str,int);//轉換爲整型

var-dump($str);

結果爲int(100)

(2)$str="100.12345abc"

setType($str,float);//轉換爲單精度

var-dump($str);

結果爲float(100.12345)

(3)$str="100.12345abc"

setType($str,bool);//轉換爲布爾型

var-dump($str);

結果爲bool(true)//bool型非0的數都是真。

二、原類型不變,返回一個新的類型:

在賦值前使用(類型)的形式,不會改變原類型的結果

$a=(int)"123abc";


$變量=intval(變量或值);

$變量=floatval(變量或值);

$變量=stringval(變量或值);

$a=(int)"123abc";//在賦值前轉換爲整型

(1)

$str="100.12345abc"

$a=(int)$str;

var-dump($a);

var-dump($str);

結果爲100,後面是字符串。轉換類型不影響原類型。

注意:整型在內存中佔4個字節

           浮點類型在內存中佔8個字節(當浮點類型轉換爲整型時,將浮點型比作臉盆,將整型比作杯子,如果臉盆的水少於或等於杯子能呈的水,那麼就不會出問題,如果臉盆裏的水多餘杯子裏的水,那麼水就會溢出,所以轉換就會出錯誤)

整型有一個最大容量,2.147e9.超過這個數值的轉換就會出錯。例如:

$float=123.456;

$int=(int)$float;

echo  $int;//結果是123

如果

$float=200000004435000000000000.3424324;

那麼結果會顯示爲0.

注意:轉換浮點型,

$a="";

$int=floatval($a);

echo   $int;

輸出結果爲0,變量爲空變量或者全爲字母或者在首位無數字而在中間或後面出現數字那麼結果也是0.如果在首位出現數字,例如

$a="123sadsdksdf32213";

那麼結果爲123。

後邊這個字母有個特殊法。例如

$a="123.123esadsdksdf32213";轉爲浮點型的結果爲123.123x10^5=12312300

一種是自動轉換:最常用的方式,因爲這種我們在開發時不需要去管理類型,變量會根據運行環境自動轉換

弱類型轉換;$a=10;      $b="100abc"     $c=true;     $d=12.34;

$sun=$a+$c;//布爾型自動轉換爲數字1。結果爲11.

$sun=$a+$c+$b;//字符串自動把$b前面數字轉化爲100,結果爲111.

$sun=$a+$c+$b+$d;//浮點數是大,由小的轉換爲大的,結果爲float(123.34)

這就是自動轉換,也是PHP開發速度快的原因之一。PHP跟別的語言最主要的區別就是因爲它是弱類型。跟C/JAVA區別很大,弱類型很多時候不用管類型,它會自動轉換。

2、與變量和類型有關的一些常用函數

isset();判斷一個變量存不存在;值如果是null,也表示空

$a="  ";//只要是$a存在哪怕爲空,也會輸出“11111111111”

if(isset($a)){

             echo   "1111111111<br>";

}else{

          echo    "00000000000<br>";

}

empty();判斷一個變量是否爲空//在變量存在的情況下去判斷例如“”、“null”都是空

“null”表示變量不存在了

unset();去刪除一個變量

setType();設置類型

getType();得到類型

$a=10;

echo    getType($a);//得到整型,只得到類型,沒有值

var-dump();既顯示類型又顯示值。例如:

$=10;

if(getType($a)="integer"){

               echo"11111111";

}else{

              echo   "2222222222"

}

最好不要這樣寫,因爲這個函數知識得到類型,然而得到類型不一定去判斷,可以把它存到數據庫或其他的一切工作。我們有專門判斷類型的變量類型測試函數例如;

is_bool();

is_int();   

is   integer();    is   long();//都是判斷整型的

is_string();

is_float();

is_array();

is_object();

is_resource();

is_null();

is_scalar();//判斷是否是標量,也就是判斷是否是整型、浮點型等等

is_numberis();//判斷是否爲任何類型的數字或者是數字字符串。

is_callable();//判斷是否是有效的函數名

例如:$a=array("one", "two", 1, 4, 6, 8, 9);
if(is_array($a)){    //判斷數組
print_r($a);     //打印數組
}else{
echo $a;       //輸出變量值
}

3、常量的聲明與使用

1、常量是一個簡單值的標示符

2、常量定義後不能改變它的值,也不能使用unset()取消。

什麼時候我們用常量呢?

你如果覺得一些數據在整個項目運行過程中只用它的值不去改變它的值,這個時候最好聲明常量。變量會有被誤改的危險。

3、常量可以不予理會變量範圍的規則,而在任何地方都可以定義和訪問。常量的使用範圍要比變量要廣

例如;define("HOME", "aaaaaaaaaaaaaaaa");
$a=100;
function demo(){
global $a;//如果不加這個全局變量那麼$a不會被輸出,後期會講到
echo $a;

                echo HOME;

4、常量使用define(“常量名”,"值");定義

例如:define(“HOME”,"aaaaaaaaaaa");

            echo     HOME;

5、常量在任何時候都不需要使用“$”,而變量在任何時候都需要使用“$”

6、常量名稱習慣都用大寫,但是小寫也能用。

7、常量的值只能用標量類型(int、float、bool等)

8、常量一定要在聲明時就給值。

9、查看常量存在不存在:defined(“常量字符串”)

define("HOME2", "aaaaaaaaaaaaaaaa");
if(defined("HOME")){
echo HOME;
}else{
define("HOME", "bbbbbbbbbbbb");//如果不存在,那麼就聲明一個
}
        echo HOME;


系統還給出了預定義常量和魔術常量。有的固定常量例如;派。3.1514926

echo_file_,"<br>"

echo_line_,"<br>"//這倆都是魔術變量

                        (24)PHP的運算符與表達式
變量和運算符都是語言語法中必須有的比分是一個命令解釋器對一個或多個操作數,也就是操作或數值執行某種運算的符號。也稱操作符。
計算除了數值外就離不開計算符號,所以根據操作數的個數分類爲:
一元運算符:一個操作數前面有一個運算符。例如:    !TRUE  (將真變成反)    “ !”爲運算符。
二元運算符;例如:$a+$b    $a、$b稱爲操作數。
三元運算符:例如:true?1=0
按運算符號的不同功能分爲:
1、算數運算符:+   —       *       /        %        ++          — —
2、字符串運算符(僅限PHP,別的語言沒有):只有一個就是“ . ”
3、賦值運算符:=     +=      —=      /=      %=        . =
4、比較運算符:<     >      >=    <=     ==     ===(恆等)      !=或 <>(不等於)        !==(恆不等)
5、邏輯運算符:&&或and(與)       || 或or (或)         !或not(非)      亦或(不常用)
6、位運算符:&(按位與)   | (按位或)   ^(按位亦或)    ~(按位非,按位取反)       <<(左移)    >>(右移)>>>(無符號右移)
7、其他的運算符號:?    :    ''(兩個反引號)    @(屏蔽錯誤輸出的)   =>   ->      ::    &     $等,只要是機器裏能夠運行的符號都可以稱爲運算符。
我們先來介紹
算數運算符,注意:除了/和%(取運算符在計算機裏叫做求模運算符)的除數不能爲0。其他的與基本運算一樣
“%”的運算呢,首先是將%兩邊的操作數轉化爲整數,然後把兩邊的數相除,得餘數。我們在開發中用到%有兩個目的,第一個目的是整除運算,例如做日曆時判斷閏年,
$year=2010;
if(($year%4=0 && $year!=0) ||$year%400=0){
echo  "111111111"//表示閏年
}else{
echo  "000000000"
}
第二個目的是控制範圍,取餘不要用小數、也不要用複數(儘量不要用),因爲%要把運算符兩邊的數轉爲整數再取值。
可以控制一個數不大於10
$dum=9;
 echo   $dum%10;//結果爲9

$dum=19;
 echo   $dum%10//結果一樣爲9

$dum=19;
 echo   $dum%10//結果一樣爲9。達到控制範圍的目的

++      — —
 $a=10;
$a++;       //$a=$a+1;     先用變量再自增1
   ++$a;      //$a=$a+1;     先用自增1再用變量
  $a--;       //$a=$a-1;     先用變量再自減1
 --$a;        //$a=$a-1;     先用自減1再用變量
echo $a;

$a=10;
  $b= $a++;          //b=10,  a=11
  $c= --$b;          //c=9 ,   b=9
  // 9 +   11     
  $d=$c++ + ++$c;       //d=20,  c=11
  $e=$d-- - --$d;       //d=18, e=2

分析字符串運算符:   “.”
 “.”可以連接字符串。必須是英文的“.”,也稱爲連接運算符。不僅可以連接兩個字符串,也可以將一個字符串跟任意標量合併成都是新的字符串。例如:
$name="tom";
  $age=27;
  $height=1.75;
echo "我的名子是:{$name}我的年齡是:{$age}我的身高是:{$height}米<br>";
echo '我的名子是:'.$name.'我的年齡是:'.$age.'我的身高是:'.$height.'米'.'<br>';//第二種方式,因爲單引號裏面是不能有這樣的變量的。搜易我們用連接。任何類型都可以跟字符串連接。
echo "\$age=".$age;//結果是$age=27。因爲前面那個$age前加的\,已經被轉義了,就相當於一個字符,然後與27連接起來。

賦值運算符:就是一個二運算符。左邊必須是變量,右邊可以使一個表達式。“=”的讀法爲被設置爲或被賦值
$a=10;
$a+=10;  //$a=$a+10;
$a-=10;  //$a=$a-10;
$a*=10;  //$a=$a*10;
$a/=10;  //$a=$a/10;
$a%=10;  //$a=$a%10;
$a.="abc"; //$a=$a."abc"$a連接字符串後再賦給$a

.=用的比較多。
$str.='<tr>';
$str.='<td>';
$str.='</td>';
$str.='</tr>';
$str.='</table>';


echo $str;
比較運算符:稱爲關係運算符,也稱爲條件運算符。經常被用到二元運算中,比較後的結果只有兩種:布爾型的,要麼真要麼假。例如:
var  dump(5>4);//結果是bool(false)
==(等號).作爲比較時一定不要寫成一個“=”例如;
$a=100;
if($a="100"){         //會輸出11111111
echo "111111111111111";
}else{
echo "0000000000000";
}
但是
$a=100;
if($a="50"){
echo "111111111111111";
}else{
echo "0000000000000";
}//也會輸出1111111111111,因爲=是賦值語句

===(比較時不僅要求內容相同,也要求類型相同)    !==(類型不相同時也可以判斷)這兩個運算符只有弱類型語言纔有這種運算符
$a=100;
if($a==="100"){
echo "111111111111111";
}else{
echo "0000000000000";
}//結果是1111111111,因爲它們內容相同,類型相同。有一樣不同就會是假、
邏輯運算符:只能操作布爾型的值,處理後的結果也是布爾型的值,
與比較運算符結果一樣都是布爾型的,所以這兩種類型大多在用在if(),while()。條件語句中。
var_dump(true && true);    //true
var_dump(true and false);   //false
var_dump(true || false);   //true
var_dump(!true);           //false
var_dump(!false);          //true

$username="admin";
  $password="123456";
 $email="";

 if($username=="admin" && $password="123456"){
  echo "用戶名和密碼輸入是正確的<br>";
  }


  if($username=="" || $password=="" || $email==""){
  echo "所有的值一個都不能爲空<br>";
  }


  if((isset($email) && !empty($email)) || (isset($phone) && !empty($phone))){    //同一級不能出現不同的邏輯運算符,要想出現,只能用括號,先比較括號裏面的運算。
  echo "有一種聯繫方式";
位運算符;因爲計算機數據都是以二進制的形式存在的。例如燈泡,只有兩種狀態開、關。兩個燈泡就是2的2次方中狀態,三個燈泡就是2的3次方中狀態,所以32位的計算機是2的32次方種狀態。
運算符中允許對整數中指定的位數進行運算。如果位運算左右參數都是字符串,運算符就會將字符串中的ASSCII碼值轉化過來。如果位運算是浮點數,也會自動轉換成整型的運算。位運算對於操作數中每一個進行二進制的數的運算。在PHP很少用到。
位運算符可以與複製運算符結合使用。例如:
 $a &=$b;
 $a  >>= $b;
  雖然運算時是以二進制的形式,但是輸出結果依然是以整型或字符型。
&:
   $a=20;   //  16+4      00010100    二進制
  $b=30;   //  16+8+4+2  00011110   二進制
要學習十進制與二進制的換算
var    dump(true||true);//結果爲bool(true)
var    dump(true | true);//結果爲bool(1)
& 和 | 即可以做爲邏輯運算符號,又可以作爲位運算符號
  &&   ||
 
  短路問題:&& 和 ||會發生短路


   && 在作運算時, 如果前面的數是false, 則後面是否爲true,整個表達式都是false, 所就不去執行後面的操作數。
   || 在作運算時, 如果前面的數是true, 則後面是否爲false, 整個表達式都爲true, 
   所就不去執行後面的操作數。


   & 或 |在用運算時,兩邊都會被執行

 $num=10;
if($num > 5 || $num++ < 100 ){     //結果是十。如果將||換成&,那麼結果是11,。如果將||換成|,結果又是11這是因爲短路問題。
}
echo $num;
fopen(“hello.php” ,"r")or  die("打開文件失敗");以讀的形式打開hello.php這個文件。
其他運算符:
條件?成立了就執行這裏  :不成立就執行這裏
$=10;
$b=$a>5? $a  : 5;
echo  $b;//因爲$a大於5所以結果爲10

$page=isset($_GET["page"])?$_GET["page"]=1;//查看有沒有page,沒有就輸出一
echo $page;

$str= 'ipconfig/all'      反引號,相當於執行命令。查詢IP地址的。
echo '<pre>';//按原型輸出
echo $str;//就會輸出IP地址
echo '</pre>';
PHP完成不了的我們用系統命令完成,用PHP能完成的我們儘量用PHP而不用系統命令完成。所以大家儘量不要用反引號執行什麼命令以後可能會出現跨平臺的一些問題

@放到表達式前面,該表達式產生的任何錯誤提示都將被忽略掉。例如
getType();//錯誤提示,缺少參數。但是在PHP中一樣會輸出“#########”。
echo  "#########";
如果
@getType();//錯誤將不再提示。
echo  "#########";
不過,有錯誤要解決,這種符號儘量不要去使用。

所有的運算符都有優先級,先執行什麼運算,後執行什麼運算。如果我們用優先級寫程序,那麼別人讀你的程序必須也要了解優先級,所以爲了增強可讀性,我們用()來提高某個運算符先運行來改變優先級

表達式:有變量有運算符的都屬於表達式




  





          










































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章