2018-3-5 面向对象

Posted 凉冰婵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-3-5 面向对象相关的知识,希望对你有一定的参考价值。

今天学习了有关“面向对象”的内容:

传统的面向对象:把将要完成的工作,一个步骤一个步骤的实现,最终完成目标。

现代的面向对象:把要做的事情提前存起来,等到需要用的时候调用,相当于设计方法和方法的调用。

面向对象主要是设计思想上的极大提升。面向过程是解决简单问题的自然的思维过程,面向对象是解决大规模的复杂问题的良好思想。

面向对象的基本概念:

类:表示一个群体。有“共同特征”,某一类事物的总称。

对象:表示群体中的个体,万事万物皆为对象。

1、定义类:

定义类的语法中,包括定义属性、定义方法、定义常量三种。

2、创建类的对象:

3、使用对象:

//定义类
class
c1{ var $name="匿名"; var $sex="未知"; var $age=18; function f1(){ echo "函数f1被调用!"; } const pi=3.14; }
//创建类的对象
$person1=new c1(); $person2=new c1(); $person1->name="张三"; $person1->sex="男"; $str1=$person1->name; echo "{$str1}的性别为:".$person1->sex."<br />"; $person1->f1();

创建对象的基本形式:

①$对象名1=new 类名();

②可变类名:

$CName="C1";
$person3=new $CName();   //可变类(名)

③$对象名3 = new  self;     //self指代类本身,这行代码只能在类内部方法中使用。

④通过对象创建对象

$person4=new $person3;    //通过对象创建该类的新对象

对象的传值:

php中,传值方式有值传递和引用传递。

值传递:拷贝数据本身。传递结束,有两份数据,但两变量“相互独立”。

引用传递:传递结束,数据只有一份,两个变量同时指向该数据。

面向对象:默认值传递,可以引用传递。

class p{
    var $v1=10;
}
$p1=new p();
$p2=$p1->v1;
$p1->v1=20;
var_dump($p1);
var_dump($p2);

输出结果为:$p1=20

      $p2=10

class p{
    var $v1=10;
}
$p1=new p();
$p2=$p1;  //传的是v1,不是v1的值
$p1->v1=20;
var_dump($p1);
var_dump($p2);

输出结果为:$p1=20

      $p2=20

class p{
    var $v1=10;
}
$p1=new p();
$p2=&$p1->v1;
$p1->v1=20;
var_dump($p1);
var_dump($p2);

输出结果为:$p1=20

      $p2=20

面向对象的方法:

例:

//斜边
class person{
    var $x=1;
    var $y=1;
    var $pi=1;
    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 />斜边1=$xie1";

$this关键字:

$this是一个“伪对象”,代表当前所属类的当前对象。

//类与对象的创建   “自我介绍”
class Person{
    public $name="匿名";
    public $age=28;
    public $PI=3.14;
    function intro(){
        echo"<b/>hi,大家好,我叫".$this->name;
        echo",今年".$this->age."岁<br/>";
    }
}
$p1=new Person();
$p1->name="张三";
$p1->age=20;
$p1->intro();
$p2=new Person();
$p2->name="李四";
$p2->age=22;
$p2->intro();

一个系统函数:get_class(对象) 

作用:获得某个对象的“所属类名”——结果只是一个类名字符串。

$class_name = get_class($p1);   //结果是:”Person” 

静态属性

定义:只隶属于类本身——也可以看做是所有对象的“共有数据”。

使用:

//静态属性
class C1{
    static $v1=10;    //静态属性
}
C1::$v1=100;    //修改静态属性的值
$s1=C1::$v1;    //取得静态属性的值
echo "s1=$s1";
$c1=new C1();
$c2=new c1();
echo "<br/>c1的中的静态属性v1=".$c1::$v1;
$c1::$v1=1000;    //通过$c1修改了静态属性值
echo "<br/>c2的中的静态属性v1=".$c2::$v1;

静态方法

方法的前面加上static关键字修饰,就变成了静态方法。

静态方法同样隶属于类,而不是隶属于具体对象。使用方法跟静态属性类似:

类名::静态方法名();

静态方法是只隶属于类,而为所有对象所“共有”。

注意1:$this在静态方法中不能使用。

self:代表当前类。

class S2{
    public $v1=1;
    static function getNew(){
        return new self;    //self代表"当前类"
    }                        //new self代表当前类的一个对象
}
echo"<hr />";
$obj2=S2::getNew();        //t通过S2的静态方法得到该类的一个新对象
var_dump($obj2);

构造方法和析构方法:

构造方法是“创建”对象的时候会自动调用。

析构方法是“销毁”对象的时候会自动调用。

class student{
    public $name="匿名";
    public $sex="未知";
    static $age=18;
    const food="馒头";
    function intro(){
        echo"<b/>hi,大家好,我叫".$this->name;
        echo",我是".$this->sex."生<br/>";
        echo ",我爱吃".self::food."。<br>";
    }
    function __construct($n,$s){  //构造方法
        $this->name=$n;
        $this->sex=$s;
    }
    function __destruct(){  //析构方法
        echo"<br/>被销毁了";
    }
}
echo"<hr/>";
$student1=new student(‘刘能‘,‘男‘);
$student1->intro();
$student2=new student(‘赵四‘,‘男‘);
$student2->intro();
echo"<hr/>";

 

以上是关于2018-3-5 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

2018.3.5

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)