<?php echo "Hello world!";?>
<?php echo 12*3;?>
<?php echo 'Hi,imooc!';?>
<?php echo 'Hi'.'imooc!'?>
变量
$var ="...";
数据类型
四种标量类型
布尔 整 浮点 字符串
两种复合类型
数组 对象
两种特殊类型
资源 空类型
var_dump($string)//输出变量的数据类型和值
字符串
$love="I Love you!";
//双引号
$string1="...,$love";//...,I Love you!
//单引号
$string2='...,$love';//...,$love
PHP特殊类型——资源
PHP特殊类型-空类型NULL
对大小写不敏感
1.一个变量没有值
2.尚未被赋值
3.被unset()
<?php
error_report(0)
$var;
var_dump($var);//NULL
$var1=null;
var_dump($var1);//NULL
$var3="节日快乐!";
unset($var3);
var_dump($var3);
?>
常量
define()
<?php
$p="PII";
define("PI",3.14);
define($p,3.14);
echo PI;
echo "<br1>";
echo PII;
?>
系统常量
__FILE__:php程序名。可帮助获取当前文件在服务器的物理位置。
__LINE__:php程序文件行数。可以告诉我们当前代码在第几行
PHP_VERSION:当前解析器的版本号。
PHP_OS:当前PHP版本的操作系统名称
常量取值
<?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运算符
=
&:引用赋值,两个变量共享一块内存
<?php
$a="...";
$b=$a;
$c=&$a;
...
...
?>
比较运算符
==
===
!=
<>
!==
<
>
<=
>=
逻辑运算符
$a and $b
$a or $b
$a xor $b 逻辑或 有且仅有一个true
$a && $b
$a || $b
!$a
字符串连接运算符
$a="...";
$tip=$a."...";
$a.="...";
$c=$c."...";
WAMPServer集成开发环境
W:Windows
A:Apache
M:MySQL
P:PHP
错误控制运算符
<?php
$echo=@mysql_connect("localhost","username","password");
echo "出错了,错误原因是: ".$php_errormsg;
?>
算术运算符
<?php
$maxLine=4;
$no=17;
$line=ceil($no/maxLine);//5
$row=$no%$maxLine?$no%$maxLine:$maxLine;
echo "编号<b>".$no."<b>的座位在第<b>".$line."</b>排第
</b>".$row."</b>个位置";
<?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");//获取当前星期几
$num=rand(1,50);
do{…}while(…);
foreach
只取值 不取下标
foreach(数组 as 值){
....
}
同时取下标和值
foreach(数组 as 下标 =>值){
...
}
<?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){
...
}
...
}
数组
空数组
<?php
$arr=array();
?>
索引数组
数组的建是整数 并且建的整数顺序从0开始,以此类推
<?php
$fruit=array("aa","bb","cc");
print_r($fruit);//print_r以数组为输入
?>
Array
(
[0]=>aa
[1]=>bb
[2]=>cc
)
赋值方式
$arr[0]='苹果';
array('0'=>'苹果');
array('苹果');
if(isset($arr)) {print_r($arr);}//isset 检测变量是否设置
访问索引数组内容
<?php
$arr=array('苹果','香蕉');
$arr0=$arr['0'];
if(isset($arr0)){
print_r($arr0);//苹果
}
?>
for循环访问索引数组里的变量
<?php
$fruit=array('苹果','香蕉','菠萝');
for($index=0;$index<3;$index++){
echo "<br>数组第".$index."值是: ".$fruit[$index];
}
?>
<?php
$fruit=array('苹果','香蕉','菠萝');
foreach($fruit as $key => $value){
echo '<br>第'.$key.'值是:'.$value;
}
?>
关联数组
数组的键是字符串
<?php
$fruit=array(
'orange'=>'橘子,'
‘apple’=>'苹果'
);
print_r($fruit);
?>
关联数组赋值
<? php
//$arr=array('apple'=>'苹果’);
$arr=array();
$arr['apple']='苹果';
if(isset($arr)){
print_r($arr);
}
?>
访问关联数组内容
<?php
$arr=array('apple'=>'苹果','banana'=>'香蕉','pinapple'=>'菠萝');
$arr0=$arr['apple'];
if(isset($arr0))
{
print_r($arr0);
}
?>
foreach同索引数组
PHP函数
function
函数名为字母或下划线开头
<?php
function say(){
echo 'hello world';
}
say();
?>
<?php
function sum($a,$b){
echo $a+$b;
}
sum(1,2);
?>
返回值
可以返回包含数组和对象的任意类型,如果省略了return,则默认返回值为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()是一种语言结构,而不是函数,是将响应数组中的值赋给list中命名的变量
可变函数
function name(){
echo 'jobs';
}
$func='name';
$func();
可变函数也可用在对象的方法调用上
class book{
function getName(){
return 'bookNum';
}
}
$func='getName';
$book=new Book();
$book->$func();
=>数组成员访问符
->对象成员访问符
PHP内置函数
字符串处理函数
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';
}
类和对象
<?php
class Car{
var $name="汽车";
function getname(){
return this->name;
}
}
$car=new Car();
$car->name='奥迪';
echo $car->getName();//奥迪
?>
类名
字母下划线开头 后 跟字母下划线数字
<?php
class Car{
public $name='汽车';
public function getName(){
return $this->name;
}
}
//$car=new Car();
$className='Car';
$car=new $className();
?>
访问控制关键字
public
prrotected
private
class Car{
public $name='汽车';
protected $color='白色';//外部无法访问
private $price='100000';//外部无法访问
}
默认public
->对象操作符
访问对象的属性或方法
::
对于静态属性使用::双冒号进行访问
静态方法
class Car{
public static function getName(){
return '汽车';
}
}
echo Car::getName();//‘汽车’
构造函数
class Car{
function __construct(){
print "构造函数被调用\n";
}
}
$car=new Car();//自动调用
调用父类构造函数
parent::__construct()
class Car{
function __construct(){
print "父类构造函数被调用\n";
}
}
class Turck extends Car{
function __construct(){
print "子类构造函数被调用\n";
parent::__construct();
}
}
$car=new Truck();
析构函数
对象销毁执行
class Car{
function __construct(){
}
function __destruct(){
print "析构函数被调用\n";
}
}
$car=new Car();
echo '使用后,准备销毁对象';
unset($car);
PHP代码执行完毕会自动回收销毁对象,因此不需要显示销毁对象
static
class Car{
private static $speed=10;
public static function getSpeed(){
return self::$speed;
}
}
echo Car::getSpeed();
$func='getSpeed';
$className='Car';
echo $className::$func();
静态方法中,$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类和对象之访问控制
public:类成员可以在任何地方呗访问
protected:可以被自身以及子类和父类访问
private:只能被其定义所在的类访问
var:视为公有
类中的方法默认为私有
构造函数定义为私有方法,则不允许直接实例化对象
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;
?>
类和对象之重载(不同java)
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
属性的重载
<?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属性动态创建并赋值
echo $car->name;
?>
方法的重载__call
当调用不存在的方法的时候,将会转化参数调用__call方法,当调用不存在的静态方法时会使用__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;
类和对象之对象的高级属性
==
同一个类的两个实例的所有属性都相等
===
两个变量是否为同一个对象的引用
class Car{
}
$a=new Car();
$b=new Car();
if($a==$b) echo '==='; //true
if($a===$b) echo '===' ; //false
clone
对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这是__clone方法会被调用,通过这个魔术方法来设置属性的值。
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);
结果
object(Car)#2(1){
['name']=>
string(7) "New Car"
}
serizlize
对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或传递数据,然后在需要的时候通过unserialize将字符串反序列化为对象进行使用
class Car{
public $name='car';
}
$a=new Car();
$str=serialize($a);//对象序列化为字符串
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字符串
单引号
双引号
heredoc语法结构
单引号、双引号区别
PHP允许我们在双引号串中直接包含字符串变量,而单引号中的内容总被认为是普通字符。
$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()
获取字符串长度
$len=strlen($str);
mb_strlen()
获取字符串中中文长度
$str='我爱你';
echo mb_strlen($str,"UTF-8");//3
//中文一般采用UTF-U编码
subStr(字符串变量,开始截取的位置,截取个数)
mb_substr(字符串变量,开始截取的位置,截取个数,网页编码)
$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(要查找的字符串,要替换的字符串,被搜索的字符串,替换进行变量计数[可选])
$str='I want to learn js';
$replace=str_replace('js','php'.$str);
echo $replace;
sprintf(格式,需转化的字符串)
格式化字符串
$str="99.9";
$result=sprintf('%01.2f',$str);
echo result;//99.90
%:表示指定字符开始 0:表示如果空用0填满
f :float 2:小数点个数
implode
字符串合并函数
implode(分隔符(可选),数组)
返回值:字符串
$arr=array('Hello','world!');
$result=implode(' ',$arr);
printf_r($result);//Hello world!
explode
explode([分隔符[可选],字符串])
返回:字符串组成的数组
$str='apple,banana';
$result=explode(',',$str);
print_r($result);
Array
( [0]=>apple
[1]=>banana
)
addslashes()
用于对于特殊字符加上转义字符,返回一个字符串
$str="what's your name?";
echo addslashes($str);//what\'s your name?
正则表达式
正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式
$p='/apple/';
$str="apple banana";
if(preg_match($p,$str){
echo 'matched';
}
PHP中使用PCRE库函数进行正则匹配,如preg_match用于执行一个正则匹配,常用来判断一类字符模式是否存在。
正则匹配模式使用分隔符与元字符组成。
分隔符:非数字、非反斜线()、非空格的任意字符
如:/(正斜线) #(hash符号) ~(取反符号)
/foo bar/
#^[^0-9]$#
~php~
模式中分隔符用\转义
/http:\/\/
preg_quote
进行转义
$p='http://';
$q='/'.preg_quote($q,'/').‘/’;
echo $q;
分隔符后面可使用模式修饰符:i,m,s,x等
i:不区分大小写
g:全局匹配
m:将字符串视为多行,不管是哪行都能匹配
s:将字符串视为单行,换行符作为普通字符
x:将模式中的空白忽略
$str="http://www.imooc.com/";
if(preg_match('/http/i',$str)){
echo '匹配成功';
}
正则表达式中具有特殊含义的字符称之为元字符
\ 一般用于转义字符
^ 断言目标的开始位置(或在多行模式下是行首)
$ 断言目标的结束位置(或在多行模式下是行尾)
. 匹配除换行符外的任何字符(默认)
[ 开始字符类定义
] 结束字符类定义
| 开始一个可选分支
( 子组的开始标记
) 子组的结束标记
? 作为量词,表示0次或1次匹配。位于量词后面用于改变量词的贪婪特性。
* 量词,0次或多次匹配
+ 量词,1次或多次匹配
{ 自定义量词开始标记
} 自定义量词结束标记