[PHP基础]总结1

<?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次或多次匹配
{ 自定义量词开始标记
} 自定义量词结束标记

    原文作者:子木同
    原文地址: https://www.jianshu.com/p/37b6c3506a8a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞