美文网首页我爱编程
php面向对象——基础

php面向对象——基础

作者: BULL_DEBUG | 来源:发表于2018-04-16 17:28 被阅读12次

一、 对象和类:

类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

1.  class person{ }//这个是类  
2.  $obj = new person();//类的实例化就是对象
1、类和对象的简单使用
Class Father {
    public $name; // 这是属性
    
    // 这是方法     
    public function work() {
        echo '<h2>努力工作</h2>';
    }
}
$f = new father(); // new 实例对象
echo $f->name;
$f->work();
2、$this的使用

指的是当前对象的意思,在类的内部使用。

class Father{
    public $name; 
    public function setName($name)  {
        $this->name = $name;
    }
    public function getName()  {
        return $this->name;
    }
}
$father= new Father();
$father->setName("张三");
$name = $test->getName();
echo $name; // 张三

二、继承

1、简单使用
Class Father {
    public $name; // 这是属性
    // 这是方法     
    public function work() {
        echo '<h2>努力工作</h2>';
    }
}
/**
 * 子类继承父类
 */
Class Son extends Father {

}
$ming = new Son(); // new 子类的实例对象
echo $ming->name; // 
$ming->work(); // 努力工作
2、重写
Class Father {
    // 属性
    public $name;
    /**
     * 父类中方法
     */
    public function work() {
        echo '<h2>努力工作</h2>';
    }
    /**
     *  重写的时候权限只能放大不能缩小
     *  在子集是可以的
     */
    public function jump() {
        echo '<h2>能跳3米</h2>';
    }
}
/**
 * 子类继承父类
 */
Class Son extends Father {
    /**work
     * 重写父类方法
     */
    public function jump() {
        echo '<h2>能跳5米</h2>';
    }// 改写父类
    public function work() {
        parent::work(); //在父类基础上添加
        echo '<h2>还要谈恋爱</h2>';
    }
}
$f = new father();
$f->work(); // 努力工作
$f->jump(); // 能跳3米
//子类的实例对象
$ming = new Son();
$ming->work(); //"努力工作/n 还要谈恋爱"
$ming->jump(); //"能跳5米"

三、修饰符

public:默认值,表示全局的,类内部外部子类都可以访问。
protected:表示受保护的,只有本类或子类或父类中可以访问,不允许外部调用。
private:表示私有的,只有本类内部可以使用。

1523868465(1).jpg
<?php
/**
 * 父类
 */
Class Father {
    // 属性
    public $name;
    protected $age;
    private $height;
}
/**
 * 子类继承父类
 */
Class Son extends Father {
    /**
     * 完全输出
     */
    public function sonOut() {
        echo '<h2>'.$this->name.' </h2>';// 父亲
        echo '<h2>'.$this->age.' </h2>'; // 49
//        echo '<h2>'.$this->height.' </h2>'; // 报错
    }
}
$f = new father();

echo $f->name.'<br />'; // “父亲”
//echo $f->age.'<br />'; // 报错
//echo $f->height.'<br />';// 报错

$ming = new Son();
$ming->sonOut();

Static:
(1)静态的属性;
(2)用static修饰的成员属性可以被同一个类的所有对象共享;
(3)静态的数据是在类第一次被加载的时候就存在了内存中的数据段中(初始化静态段);
(4)类中使用self::成员属性名;
(5)类外 类名::成员属性名;

Const:
(1)类中常量属性,在类中声明常量必须使用const;
(2)类中使用 self::成员属性名;
(3)类外使用 类名::成员属性名;

注意:属性中的变量可以初始化,但是初始化的值必须是常数

(这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶
段运算出的常数。例如,不能包含任何运算符,不能是任何变量,不能是一个函数等)。

成员属性的调用方式:
在类的成员方法里面,可以通过 $this->property(property是属性名字)这种方式来访问类的属性、 方法。但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用 self::$property。
在类的非静态方法里面可以使用伪变量 $this,这个伪变量是调用该方法的实例化对象引用。

Class Father {
    static $like = '吃';
    const SEX = '男';
    /**
     * 魔术方法
     */
    public function __construct(){
        echo self::$like;  // 吃
        echo self::SEX; // 男
//          echo $this->like; //报错
//          echo $this->SEX;//报错
    }
}

四、魔法方法

1.__construct():构造函数,在实例化对象时被调用

2.__destruct():解析函数。(不常用)

3.__set():属性重载,在给不可访问属性赋值时,会被调用

4.__isset():属性重载,当对不可访问属性调用isset()时,会被调用,返回布尔值

5.__unset():属性重载,当对不可访问属性调用unset()时,会被调用

6.__clone():克隆

7.__toString():用于返回一个字符串。只有在直接使用于echo或print时才能生效

8.__autoload():自动加载类文件

9.__get():属性重载,在读取不可访问属性的值时,会被调用

10.__call():方法重载,在对象中调用一个不可访问方法时,__call会被调用

11.__autoload():没有引入文件时自动加载

12.__sleep():当对象串行化(serialize()串行化对象)那一瞬间会调用该方法。不能返回父类的私有成员名字。

13.__wakeup():在反序列化操作(unserialize()反序列化)那一瞬间会调用该方法。

注意:属性重载只能在对象中进行。在静态方法中,这些魔术方法不会被调用,所以这些方法不能被声明为static。

eg:


function __autoload($name){
    include_once $name.".class.php";
}
$human = new Human();
echo $human->age."<br>";//18


class Student
{
    public $name,$age;
    function __construct($name,$age){
        $this->name = $name;
        $this->age = $age;
    }
    function __toString()
    {
        // TODO: Implement __toString() method.
       return $this->name."今年".$this->age;
    }
    function __clone()
    {
        // TODO: Implement __clone() method.
    }
    //不存在函数时会调用该方法
    function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        echo $name."方法不存在"."<br>";
        print_r($arguments);
        echo "<br>";
    }
    function __isset($name)
    {
        // TODO: Implement __isset() method.
        //echo "Is"."&nbsp".$name."&nbsp"."set?";
    return  isset($this->data[$name]);
    }
    //当对象被串行化那一瞬间
    function __sleep()
    {
        // TODO: Implement __sleep() method.
        echo "我要睡着了";
        return array("name","age");
    }
    //当字符串反序列化变回对象那一瞬间调用
    function __wakeup()
    {
        // TODO: Implement __wakeup() method.
        echo "<br>";
        echo "我要醒了";
    }
}


$stu = new Student("张三",18);
echo $stu."<br>";       //张三今年18
$stu2 = clone $stu;
$stu2->name = "李四";
echo $stu2."<br>";      //李四今年18
$stu2->show("王五",18);  //show方法不存在   Array ( [0] => 王五 [1] => 18 ) 
var_dump(isset($stu2->num));  //bool(false)
echo "<br>";
//串行化对象
$str = serialize($stu);   //此时调用sleep函数,输出我要睡着了
echo "<br>";    
echo $str;   //O:7:"Student":2:{s:4:"name";s:6:"张三";s:3:"age";i:18;}
//反序列化字符串
$strToArr = unserialize($str);   //此时调用wakeup函数,输出我要醒了
echo "<br>";
echo $strToArr;            //张三今年18

相关文章

  • 类的声明和语法

    1.达标和检测 学习PHP的面向对象,你需要具备PHP面向过程的相关基础,如不会,请先学习PHP基础部分. 面向对...

  • PHP技术梳理

    PHP语言: PHP基础, 数据类型, 导入文件 string array 面向对象技术, 类, 对象, 继...

  • php面向对象——基础

    一、 对象和类: 类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组...

  • php面向对象基础

    类 类的定义 访问控制 public (公有) 公有的类成员可以在任何地方被访问。 protected ...

  • PHP面向对象基础总结

    (一):面向对象编程OOP OOP(Object-Oriented Programming), 面向对象的编程)技...

  • PHP面试题库库-PHP基础部分

    2020PHP经典面试题汇总,包括如下部分: PHP基础部分 PHP 高级部分 数据库相关 面向对象部分 Thin...

  • php面试常问的题目2

    PHP专业面试题汇总一、PHP基础:二、数据库部分三、面向对象部分四、ThinkPHP部分五、smarty模板引擎...

  • 2020PHP经典面试题库-高级部分

    2020PHP经典面试题库汇总,包括如下部分: PHP基础部分 PHP 高级部分 数据库相关 面向对象部分 Thi...

  • 2019-07-28

    在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用。

  • 17.PHP面向对象-基础

    把大象装进冰箱里,一共分几步? 为什么要面向对象 将一系列相关的操作和数据封装(整理)到一起。因为有些数据和操作要...

网友评论

    本文标题:php面向对象——基础

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