<?php echo "Hello world!";?>
<?php echo 12*3;?>
<?php echo 'Hi,imooc!';?>
<?php echo 'Hi'.'imooc!'?>
變量
$var ="...";
數(shù)據(jù)類型
四種標(biāo)量類型
布爾 整 浮點(diǎn) 字符串
兩種復(fù)合類型
數(shù)組 對(duì)象
兩種特殊類型
資源 空類型
var_dump($string)//輸出變量的數(shù)據(jù)類型和值
字符串
$love="I Love you!";
//雙引號(hào)
$string1="...,$love";//...,I Love you!
//單引號(hào)
$string2='...,$love';//...,$love
PHP特殊類型------資源
PHP特殊類型-空類型NULL
對(duì)大小寫不敏感
1.一個(gè)變量沒有值
2.尚未被賦值
3.被unset()
<?php
error_report(0)
$var;
var_dump($var);//NULL
$var1=null;
var_dump($var1);//NULL
$var3="節(jié)日快樂彤灶!";
unset($var3);
var_dump($var3);
?>
常量
define()
<?php
$p="PII";
define("PI",3.14)糕档;
define($p,3.14);
echo PI;
echo "<br1>";
echo PII;
?>
系統(tǒng)常量
__FILE__:php程序名式曲。可幫助獲取當(dāng)前文件在服務(wù)器的物理位置派诬。
__LINE__:php程序文件行數(shù)×凑樱可以告訴我們當(dāng)前代碼在第幾行
PHP_VERSION:當(dāng)前解析器的版本號(hào)默赂。
PHP_OS:當(dāng)前PHP版本的操作系統(tǒng)名稱
常量取值
<?php
define("PI",3.14);
$r=1;
$area=PI*$r*$r;
?>
<?php
define("PI",3.14);
$r=1;
$area=constant("PI")*r*$r;
?>
判斷常量是否被定義
<?php
define("PI1",3.14);
$p="PI1";
$is1=defined($p);
$is2=defined("PI2");
var_dump($is1); //bool(true)
var_dump($is2); //bool(false)
?>
PHP運(yùn)算符
=
&:引用賦值括勺,兩個(gè)變量共享一塊內(nèi)存
<?php
$a="...";
$b=$a;
$c=&$a;
...
...
?>
比較運(yùn)算符
==
===
缆八!=
<>
!==
<
>
<=
>=
邏輯運(yùn)算符
$a and $b
$a or $b
$a xor $b 邏輯或 有且僅有一個(gè)true
$a && $b
$a || $b
!$a
字符串連接運(yùn)算符
$a="...";
$tip=$a."...";
$a.="...";
$c=$c."...";
WAMPServer集成開發(fā)環(huán)境
W:Windows
A:Apache
M:MySQL
P:PHP
錯(cuò)誤控制運(yùn)算符
<?php
$echo=@mysql_connect("localhost","username","password");
echo "出錯(cuò)了,錯(cuò)誤原因是: ".$php_errormsg;
?>
算術(shù)運(yùn)算符
<?php
$maxLine=4;
$no=17;
$line=ceil($no/maxLine);//5
$row=$no%$maxLine?$no%$maxLine:$maxLine;
echo "編號(hào)<b>".$no."<b>的座位在第<b>".$line."</b>排第
</b>".$row."</b>個(gè)位置";
<?php
date_default_timezone_set('Asia/shanghai');
$today=date('m-d',time());
$birthday="03-09";
$money=238;
$discount=0.8;
if($today==$birthday){
$money=$money*sicount;
}else{
$money=$money*1;
}
echo $money;
?>
$week=date("w");//獲取當(dāng)前星期幾
$num=rand(1,50);
do{...}while(...);
foreach
只取值 不取下標(biāo)
foreach(數(shù)組 as 值){
....
}
同時(shí)取下標(biāo)和值
foreach(數(shù)組 as 下標(biāo) =>值){
...
}
<?php
$students=array(
'2010' => '令狐沖',
'2011' => '...'疾捍,
...
);
foreach($students as $r => $v){
echo $r;
echo $v;
echo "<br/>";
}
?>
$students=array(
'2010' =>array('令狐沖',"59"),
...
);
foreach($students as $key => $val)
{
foreach($val as $v){
...
}
...
}
數(shù)組
空數(shù)組
<?php
$arr=array();
?>
索引數(shù)組
數(shù)組的建是整數(shù) 并且建的整數(shù)順序從0開始奈辰,以此類推
<?php
$fruit=array("aa","bb","cc");
print_r($fruit);//print_r以數(shù)組為輸入
?>
Array
(
[0]=>aa
[1]=>bb
[2]=>cc
)
賦值方式
$arr[0]='蘋果';
array('0'=>'蘋果');
array('蘋果');
if(isset($arr)) {print_r($arr);}//isset 檢測(cè)變量是否設(shè)置
訪問索引數(shù)組內(nèi)容
<?php
$arr=array('蘋果','香蕉');
$arr0=$arr['0'];
if(isset($arr0)){
print_r($arr0);//蘋果
}
?>
for循環(huán)訪問索引數(shù)組里的變量
<?php
$fruit=array('蘋果','香蕉','菠蘿');
for($index=0;$index<3;$index++){
echo "<br>數(shù)組第".$index."值是: ".$fruit[$index];
}
?>
<?php
$fruit=array('蘋果','香蕉','菠蘿');
foreach($fruit as $key => $value){
echo '<br>第'.$key.'值是:'.$value;
}
?>
關(guān)聯(lián)數(shù)組
數(shù)組的鍵是字符串
<?php
$fruit=array(
'orange'=>'橘子拾氓,'
‘a(chǎn)pple’=>'蘋果'
);
print_r($fruit);
?>
關(guān)聯(lián)數(shù)組賦值
<? php
//$arr=array('apple'=>'蘋果’);
$arr=array();
$arr['apple']='蘋果';
if(isset($arr)){
print_r($arr);
}
?>
訪問關(guān)聯(lián)數(shù)組內(nèi)容
<?php
$arr=array('apple'=>'蘋果','banana'=>'香蕉','pinapple'=>'菠蘿');
$arr0=$arr['apple'];
if(isset($arr0))
{
print_r($arr0);
}
?>
foreach同索引數(shù)組
PHP函數(shù)
function
函數(shù)名為字母或下劃線開頭
<?php
function say(){
echo 'hello world';
}
say();
?>
<?php
function sum($a,$b){
echo $a+$b;
}
sum(1,2);
?>
返回值
可以返回包含數(shù)組和對(duì)象的任意類型冯挎,如果省略了return,則默認(rèn)返回值為NULL
function add($a){
return $a+1;
}
$b=add(1);
function numbers(){
return array(1,2,3);
}
list($name,$two,$three)=numbers();
<?php
function numbers(){
return array(“狗”,"豬","貓");
}
list(&a,&b,&c)=numbers();
echo $a."<br>".$b."<br>".$c;
?>
list()
list()是一種語言結(jié)構(gòu),而不是函數(shù)房官,是將響應(yīng)數(shù)組中的值賦給list中命名的變量
可變函數(shù)
function name(){
echo 'jobs';
}
$func='name';
$func();
可變函數(shù)也可用在對(duì)象的方法調(diào)用上
class book{
function getName(){
return 'bookNum';
}
}
$func='getName';
$book=new Book();
$book->$func();
=>數(shù)組成員訪問符
->對(duì)象成員訪問符
PHP內(nèi)置函數(shù)
字符串處理函數(shù)
str_replace
<?php
$str='蘋果很好吃';
$str=str_replace('蘋果','香蕉',$str);
echo $str;
?>
function_exists
class_exists
method_exists
file_exists
<?php
function func(){
echo 'exists';
}
$name='func';
if(function_exists($name))
$name();
}
?>
class MyClass{
}
if(class_exists('MyClass')){
$myclass=new MyClass();
}
$filename='test.txt';
if(!file_exists($filename)){
echo $filename.'not exists';
}
類和對(duì)象
<?php
class Car{
var $name="汽車";
function getname(){
return this->name;
}
}
$car=new Car();
$car->name='奧迪';
echo $car->getName();//奧迪
?>
類名
字母下劃線開頭 后 跟字母下劃線數(shù)字
<?php
class Car{
public $name='汽車';
public function getName(){
return $this->name;
}
}
//$car=new Car();
$className='Car';
$car=new $className();
?>
訪問控制關(guān)鍵字
public
prrotected
private
class Car{
public $name='汽車';
protected $color='白色';//外部無法訪問
private $price='100000'趾徽;//外部無法訪問
}
默認(rèn)public
->對(duì)象操作符
訪問對(duì)象的屬性或方法
::
對(duì)于靜態(tài)屬性使用::雙冒號(hào)進(jìn)行訪問
靜態(tài)方法
class Car{
public static function getName(){
return '汽車';
}
}
echo Car::getName();//‘汽車’
構(gòu)造函數(shù)
class Car{
function __construct(){
print "構(gòu)造函數(shù)被調(diào)用\n";
}
}
$car=new Car();//自動(dòng)調(diào)用
調(diào)用父類構(gòu)造函數(shù)
parent::__construct()
class Car{
function __construct(){
print "父類構(gòu)造函數(shù)被調(diào)用\n";
}
}
class Turck extends Car{
function __construct(){
print "子類構(gòu)造函數(shù)被調(diào)用\n";
parent::__construct();
}
}
$car=new Truck();
析構(gòu)函數(shù)
對(duì)象銷毀執(zhí)行
class Car{
function __construct(){
}
function __destruct(){
print "析構(gòu)函數(shù)被調(diào)用\n";
}
}
$car=new Car();
echo '使用后翰守,準(zhǔn)備銷毀對(duì)象'孵奶;
unset($car);
PHP代碼執(zhí)行完畢會(huì)自動(dòng)回收銷毀對(duì)象,因此不需要顯示銷毀對(duì)象
static
class Car{
private static $speed=10;
public static function getSpeed(){
return self::$speed;
}
}
echo Car::getSpeed();
$func='getSpeed';
$className='Car';
echo $className::$func();
靜態(tài)方法中蜡峰,$this偽變量不允許使用了袁,可使用self;
class Car{
private static $speed=10;
public static function getSpeed(){
return self::$speed;
}
public static function speedUp(){
return self::$speed+=10;
}
}
class BigCar extends Car{
public static function start(){
parent::speedUp();
}
}
BigCar::start();
echo BigCar::getSpeed();
PHP類和對(duì)象之訪問控制
public:類成員可以在任何地方唄訪問
protected:可以被自身以及子類和父類訪問
private:只能被其定義所在的類訪問
var:視為公有
類中的方法默認(rèn)為私有
構(gòu)造函數(shù)定義為私有方法,則不允許直接實(shí)例化對(duì)象
class Car{
private function __construct(){
echo 'object create';
}
private static $_object=null;
public static function getInstance(){
if(empty(self::$_object)){
self::_object=new Car();
}
return self::$_object;
}
}
//$car=new Car();
$car=Car::getInstance();
繼承
<?php
class Car{
public $speed=0;
public function speedUp(){
$this->speed+=10;
return $this->speed;
}
}
class Trunk extends Car{
public function sppedUp(){
parent::speedUp();
$this->speed+=50;
}
}
$car=new Trunk();
$car->speedUp();
echo $car->speed;
?>
類和對(duì)象之重載(不同java)
PHP中的重載指的是動(dòng)態(tài)的創(chuàng)建屬性與方法湿颅,是通過魔術(shù)方法來實(shí)現(xiàn)的载绿。屬性的重載通過__set,__get,__isset,__unset來分別對(duì)不存在屬性的賦值、讀取油航、判斷屬性是否設(shè)置崭庸、銷毀屬性。
屬性的重載
<?php
class Car{
private $ary=array();
public function __set($key,$val){
$this->array[$key]=$val;
}
public function __get($key){
if(isset($this->ary[$key])){
return $this->ary[$key];
}
return null;
}
public function __isset($key){
if(isset($this->ary[$key])){
return true;
}
return false;
}
public function __unset($key){
unset($this->ary[$key]);
}
}
$car=new Car();
$car->name='汽車'谊囚;//name屬性動(dòng)態(tài)創(chuàng)建并賦值
echo $car->name;
?>
方法的重載__call
當(dāng)調(diào)用不存在的方法的時(shí)候怕享,將會(huì)轉(zhuǎn)化參數(shù)調(diào)用__call方法,當(dāng)調(diào)用不存在的靜態(tài)方法時(shí)會(huì)使用__callstatic重載
class Car{
public $speed=0;
public function __call($name,$args){
if($name=='speedUp'){
¥this->speed+=10;
}
}
}
$car=new Car();
$car->speedUp();
echo $car->speed;
類和對(duì)象之對(duì)象的高級(jí)屬性
==
同一個(gè)類的兩個(gè)實(shí)例的所有屬性都相等
===
兩個(gè)變量是否為同一個(gè)對(duì)象的引用
class Car{
}
$a=new Car();
$b=new Car();
if($a==$b) echo '==='; //true
if($a===$b) echo '===' ; //false
clone
對(duì)象復(fù)制镰踏,在一些特殊情況下函筋,可以通過關(guān)鍵字clone來復(fù)制一個(gè)對(duì)象,這是__clone方法會(huì)被調(diào)用奠伪,通過這個(gè)魔術(shù)方法來設(shè)置屬性的值跌帐。
class Car{
public $name=‘car’;
public function __clone(){
$obj=new Car();
$obj->name=$this->name;
}
}
$a=new Car();
$a->name='New Car';
$b=clone $a;
var_dump($b);
結(jié)果
object(Car)#2(1){
['name']=>
string(7) "New Car"
}
serizlize
對(duì)象序列化,可以通過serialize方法將對(duì)象序列化為字符串绊率,用于存儲(chǔ)或傳遞數(shù)據(jù)含末,然后在需要的時(shí)候通過unserialize將字符串反序列化為對(duì)象進(jìn)行使用
class Car{
public $name='car';
}
$a=new Car();
$str=serialize($a);//對(duì)象序列化為字符串
echo $str.'<br>';
$b=unserialize($a);
var_dump($b);
0:3:"Car":1:{s:4:"name"s:3:"car":}
object(car) #2(1){
['name']=>
string(3) "car"
}
PHP字符串
單引號(hào)
雙引號(hào)
heredoc語法結(jié)構(gòu)
單引號(hào)、雙引號(hào)區(qū)別
PHP允許我們?cè)陔p引號(hào)串中直接包含字符串變量即舌,而單引號(hào)中的內(nèi)容總被認(rèn)為是普通字符佣盒。
$str='hello';
echo "str is $str"; //str is hello
echo 'str is $str';//str is $str
//<br>在' '、" "中都是換行
字符串連接.
trim 去除字符串兩端空格
rtrim
ltrim
echo trim(" 123 ")."<br>";
strlen()
獲取字符串長(zhǎng)度
$len=strlen($str);
mb_strlen()
獲取字符串中中文長(zhǎng)度
$str='我愛你';
echo mb_strlen($str,"UTF-8");//3
//中文一般采用UTF-U編碼
subStr(字符串變量顽聂,開始截取的位置肥惭,截取個(gè)數(shù))
mb_substr(字符串變量,開始截取的位置紊搪,截取個(gè)數(shù)蜜葱,網(wǎng)頁編碼)
$str='i love you';
echo substr($str,2,4);//love
strpos(要處理的字符串,要定位的字符串耀石,定位的起始位置[可選])
$str='I want to study at imooc';
$pos=strpos($str,'imooc');
echo $pos; //19
str_replace(要查找的字符串牵囤,要替換的字符串,被搜索的字符串,替換進(jìn)行變量計(jì)數(shù)[可選])
$str='I want to learn js';
$replace=str_replace('js','php'.$str);
echo $replace;
sprintf(格式揭鳞,需轉(zhuǎn)化的字符串)
格式化字符串
$str="99.9";
$result=sprintf('%01.2f',$str);
echo result;//99.90
%:表示指定字符開始 0:表示如果空用0填滿
f :float 2:小數(shù)點(diǎn)個(gè)數(shù)
implode
字符串合并函數(shù)
implode(分隔符(可選)炕贵,數(shù)組)
返回值:字符串
$arr=array('Hello','world!');
$result=implode(' ',$arr);
printf_r($result);//Hello world!
explode
explode([分隔符[可選],字符串])
返回:字符串組成的數(shù)組
$str='apple,banana';
$result=explode(',',$str);
print_r($result);
Array
( [0]=>apple
[1]=>banana
)
addslashes()
用于對(duì)于特殊字符加上轉(zhuǎn)義字符,返回一個(gè)字符串
$str="what's your name?";
echo addslashes($str);//what\'s your name?
正則表達(dá)式
正則表達(dá)式是對(duì)字符串進(jìn)行操作的一種邏輯公式野崇,就是用一些特定的字符組合成一個(gè)規(guī)則字符串称开,稱之為正則匹配模式
$p='/apple/';
$str="apple banana";
if(preg_match($p,$str){
echo 'matched';
}
PHP中使用PCRE庫(kù)函數(shù)進(jìn)行正則匹配,如preg_match用于執(zhí)行一個(gè)正則匹配乓梨,常用來判斷一類字符模式是否存在鳖轰。
正則匹配模式使用分隔符與元字符組成。
分隔符:非數(shù)字扶镀、非反斜線()蕴侣、非空格的任意字符
如:/(正斜線) #(hash符號(hào)) ~(取反符號(hào))
/foo bar/
#^[^0-9]$#
~php~
模式中分隔符用\轉(zhuǎn)義
/http:\/\/
preg_quote
進(jìn)行轉(zhuǎn)義
$p='http://';
$q='/'.preg_quote($q,'/').‘/’;
echo $q;
分隔符后面可使用模式修飾符:i,m,s,x等
i:不區(qū)分大小寫
g:全局匹配
m:將字符串視為多行臭觉,不管是哪行都能匹配
s:將字符串視為單行睛蛛,換行符作為普通字符
x:將模式中的空白忽略
$str="http://www.imooc.com/";
if(preg_match('/http/i',$str)){
echo '匹配成功';
}
正則表達(dá)式中具有特殊含義的字符稱之為元字符
\ 一般用于轉(zhuǎn)義字符
^ 斷言目標(biāo)的開始位置(或在多行模式下是行首)
$ 斷言目標(biāo)的結(jié)束位置(或在多行模式下是行尾)
. 匹配除換行符外的任何字符(默認(rèn))
[ 開始字符類定義
] 結(jié)束字符類定義
| 開始一個(gè)可選分支
( 子組的開始標(biāo)記
) 子組的結(jié)束標(biāo)記
? 作為量詞胧谈,表示0次或1次匹配。位于量詞后面用于改變量詞的貪婪特性荸频。
* 量詞菱肖,0次或多次匹配
+ 量詞,1次或多次匹配
{ 自定義量詞開始標(biāo)記
} 自定義量詞結(jié)束標(biāo)記