美文网首页php学习
php进阶(一)之数组与类

php进阶(一)之数组与类

作者: 半数的年 | 来源:发表于2018-07-16 10:29 被阅读0次

一、数组:索引数组、关联数组。

1、索引数组

(1)、初始化
$fruit = array('苹果','香蕉','菠萝');
print_r($fruit);

输出

Array
(
    [0] => 苹果
    [1] => 香蕉
    [2] => 菠萝
)
(2)、用foreach遍历关联数组
<?php
$fruit=array('苹果','香蕉','菠萝');
foreach($fruit as $key=>$value){
    echo '<br>第'.$key.'值是:'.$value;
}
?>

输出

第0值是:苹果
第1值是:香蕉
第2值是:菠萝

2、关联数组

(1)、初始化
<?php
//创建一个关联数组,关联数组的键“orange”,值是“橘子”
$fruit = array(
    'orange'=>'橘子'
);
?>
(2)、用foreach遍历关联数组(与索引数组类似)

二、类与对象

属性

默认都为public,外部可以访问。一般通过->对象操作符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可以使用$this伪变量调用当前对象的属性。

方法

使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。

访问限制

被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

继承

parent::speedUp(); // 使用parent访问父类方法

重载

PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。
(1)、属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。

class Car {
    private $ary = array();
    
    public function __set($key, $val) {
        $this->ary[$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;

(2)、方法的重载通过__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;
高级特性

(1)、对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。

class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '==';   //true
if ($a === $b) echo '==='; //false

(2)、对象复制,在一些特殊情况下,可以通过关键字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);

(3)、对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

class Car {
    public $name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串
echo $str.'<br>';
$b = unserialize($str); //反序列化为对象
var_dump($b);

相关文章

  • php进阶(一)之数组与类

    一、数组:索引数组、关联数组。 1、索引数组 (1)、初始化 输出 (2)、用foreach遍历关联数组 输出 2...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • Shell 数组

    数组中可以存放多个值.Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类...

  • 2019-07-24

    今天php基础之数组

  • 一. PHP入门篇和PHP进阶篇

    PHP基础语法 PHP数组 PHP函数 PHP之类和对象 PHP字符串 PHP之正则表达式 PHP之cookie ...

  • 把一个PHP对象当成数组来访问

    PHP预定义接口之 ArrayAccess(数组访问式) 一个实现了这个接口的类就可以做到了

  • 全栈技术精选文章【持续更新~~】

    php PHP 数组使用之道 PHP程序员进阶学习书籍参考指南 教你在不使用框架的情况下也能写出现代化 PHP 代...

  • PHP进阶-数组(1)

    PHP数组定义 数组就是一个键值对组成的语言结构,键类似于酒店的房间号,值类似于酒店房间里存储的东西。 如果你去某...

  • 2019-07-28

    今天看了php基础之 数组系列

  • 2019-07-30

    今天看了php基础之数组系列

网友评论

    本文标题:php进阶(一)之数组与类

    本文链接:https://www.haomeiwen.com/subject/xmwppftx.html