美文网首页PHP学习
PHP中的面向对象

PHP中的面向对象

作者: kangyiii | 来源:发表于2017-03-08 11:31 被阅读76次

PHP面向对象的语法,面向对象只可意会不可言传,万物皆对象:

定义类

1. 定义属性(变量)
2. 定义方法(函数)
3. 定义常量(类常量)
定义类

创建类对象(实例化)

创建类对象

使用对象

Snip20170306_4.png
1. 使用对象中的属性(变量)
2. 使用对象中的方法(函数)
3. 使用对象中的常量(类常量)

对象创建方式:

//方式0
$person1 = new C1();

//方式1
$CName = "C1";
$person3 = new $CName();

//方式2
$CName2 = new self;

//方式3
$person4 = new $person3;

对象传值

  1. 值传递:传递的时候拷贝一份传过去。默认方式。
  2. 引用传递:传递的就是本身,若修改本身也会被修改,需要加“&”。
与结论相反的结果

注意:默认方式是指传递,为什么打印结果是引用传递呢?其实确实拷贝出了新对象,但是新对象中的一个内部指针(指向具体指)却是被完全复制下来的,之前指向什么,拷贝内部指针后还会指向它,而这个数字就是内部指针指向的内容,如图:

Snip20170306_8.png

类中的方法:

<?
class Person{
    public $x = 1;
    public $y = 1;
    public $PI = 3.14;
    
    function getXiebian($a,$b){
        $s1 = $a*$a + $b*$b;
        $s2 = pow($s1,0.5);
        return $s2;
    }
    
}
$p1 = new Person();
$xie1 = $p1->getXiebian(3,4);
echo "<br/>斜边:".$xie1;
?>

方法中$this关键字

$this是一个“伪对象”,类似于iOS中的self

<?
class Person{
    public $name = "匿名";
    public $age = 18;
    
    //自我介绍方法
    function introduce(){
        echo "<br/>我叫".$this->name;
        echo "<br/>年龄".$this->age;
    }
}

$p2 = new Person();
$p2->name = "大牛";
$p2->introduce();

//打印结果:
//我叫大牛
//年龄18 
?>
//获取某个对象所属的类名。结果只是一个类名字符串
get_class(对象名)

静态属性

在定义属性的时候,前面加上关键字:static。作用:一般属性的值隶属于一个类对象,静态属性是所有对象的“共有数据”。下面例子中可以证明:

<?
    class C2{
        static $v1 = 10;
    }
    C2::$v1 = 100;
    $s1 = C2::$v1;
    echo "<br/>s1 =  $s1";
    //输出结果:s1 = 100
    $c1 = new c2();
    echo "<br/>".$c1::$v1;
    //输出结果:100
    $c1::$v1 = 200;
    $c2 = new c2();
    echo "<br/>".$c2::$v1;
    //输出结果:200
?>

静态方法

在方法名前添加static就变成了静态方法,静态方法属于类,不属于具体对象。使用方法和静态属性类似。

class S1{
        public $v1 = 1;
        static $v2 = 2;
        static function showInfo(){
            echo "<br/>显示信息";
            //错误写法:不能在静态方法里面调用对象属性,因为静态方法通过类名调用
            //echo "v1 = ".$this->v1;
            echo "v2= ".S1::$v2;
        }
    }
    S1::showInfo();

self

代表当前类,通常只能在某个类的某个方法内部可以使用,代表该类,
self和$this的区别:self代表当前类,$this代表当前对象,所以静态方法中可以使用self,但不能使用$this。

class S2{
        //返回这个类
        static function getInstance(){
            return new self;
        }
    }
    echo "<br/>";
    $obj2 = S2::getInstance();

构造方法

构造方法是可理解为类的一个特殊方法,其作用是在实例化一个对象的同时,给该对象的属性赋值,使它创建完成后就具有了特定的属性值或者数据。

  1. 该方法名固定:__contruct();
  2. 该方法必须是普通方法(非静态)
  3. 定义构造方法后,创建对象必须以有构造方法的形式来实例化对象
<?php 
class P{
            public $name = "匿名";
            public $age = 18;
            function intro(){
                echo "<br/>名字:".$this->name;
                echo "<br/>年龄:".$this->age;
            }
            function __construct($n,$a){
                $this->name = $n;
                $this->age = $a;
            }
        }
        //普通实例化
        $p1 = new P();
        $p1->name = "大牛弟弟";
        $p1->intro();
        
        //有构造方法的实例化
        $p2 = new P('大牛',12);
        $p2->intro();
        
    ?>      

析构方法

构造方法在创建对象时自动调用,析构方法在销毁对象时自动调用,通常,php程序结束后,所有对象都会自动销毁(php内部具有垃圾回收机制)

  1. 析构方法通常不需要定义
  2. 析构方法不能手动调用,不能有参数
  3. 析构方法中可以用于清理一些php代码结束后不能清理的数据
  4. 先创建的对象后销毁,栈的概念
  5. 销毁时机:当没有指针指向这个对象时对象就会被销毁,或使用unset()强行销毁

相关文章

  • 2019-07-28

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

  • 2019-07-18

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

  • PHP和MySQL

    1. PHP和面向对象 1.1 初识PHP 基本用法 PHP 中的每个代码行都必...

  • PHP中的面向对象

    PHP面向对象的语法,面向对象只可意会不可言传,万物皆对象: 定义类 创建类对象(实例化) 使用对象 对象创建方式...

  • PHP中的面向对象

    面向对象编程OOP, 一切已对象为核心,关注的是项目中需要哪些对象,每个对象上能实现哪些功能;概念:类:拥有相同属...

  • 类的声明和语法

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

  • 面向对象OOP--JS

    作者:烨竹 JS面向对象简介 JS名言:万物皆对象 JS面向对象比PHP简单很多;因为JS中没有class关键字,...

  • PHP技术梳理

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

  • 7.1.1 PHP面向对象之面向过程详解

    7.1.1 PHP面向对象之面向过程详解面向对象的编程思想Object Oriented 大象与冰箱1、打开2、装...

  • php学习笔记(六)

    PHP异常处理 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过thro...

网友评论

    本文标题:PHP中的面向对象

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