PHP其它常用函数:     赋值:$r->name = "元素";      取值: echo $r->name; 

count()   计算数组中的元素数目或对象中的属性个数  /  计算数组的长度

1.in_array(元素a,$attr)   判断元素a是否在数组$attr里面存在,存在返回一个true,反之false

2.array_reverse($attr)  将数组中的元素顺序翻转,创建新的数组并返回

3.array_unique($attr)   删除数组中重复的值并返回新的数组

4.array_merge($attr1,$attr)  合并数组

5.array_push($attr,元素a)   把元素a添加到数组$attr的末尾

6.unset($arr[0])   删除数组的某个元素或者变量,只在foreach遍历可以,其它语言不可以

7.array_values($arr)   按顺序重新排列$attr数组的索引

unset($attr)和array_values($attr) 一般一块用

面向对象:每一个对象都不一样,都是独立的个体; 关键词"this":"this"写在类里面是代表"该对象","该对象"谁用代表谁;

需要注意:构造对象始终存在,即使不写也是存在的 ;  构造方法的名 一般用"__construct" "__"为两个下划线 例:function __construct($n)  {}

访问修饰符:

1.public:代表公有的,在任何地方都可以访问

2.protected:代表受保护的,只能在该类或该类子类中访问

3.private:代表私有的,只能在该类中访问

OPP(面向对象)三大特性:封装,继承,多态     在PHP类里面不允许出现同名的方法

一、封装:关键字:"construct" 如:function __construct($v) {}

封装的目的:为了让类更安全★★★★

封装的做法(原理):★★★★

①所有成员变量全部要private

②使用成员方法来间接访问成员变量

③在该方法里面加限制条件

例:

class Ren
{
    private $name;
    private $sex;
    private $age;

  function __construct($v)    //构造方法 在new 新对象执行的时候就执行
    {
        $this->sex =$v;    
    }
    //魔术方法 __set 调用方法:$r->__set("age",20)或者 $r->age=20;
    function __set ($k,$v)       //可以给成员变量赋值 $k是成员变量的名称 $v为成员变量的值  在给成员变量赋值的时候,自动调用
    {
        if($k=="age")
        {    
            if($v>=18 && $v<=50)
            {
                $this->$k=$v;
            }
        }
        else              //else 其它输出不变,没别的条件
        {
            $this->$k=$v;
        }
    }
    function __get($k)     //魔术方法 __get  调用方法:$r->__get("age")或者$r->age;
    {
        return $this->$k;    
    }

      function __destruct()  //析构方法  自动执行 这个对象释放的时候自动执行
    {
        echo "这是一个析构方法";    
    }
    
    function __tostring()           //输出对象“echo $r;”时 可返回字符串“这个类是人类”的字符串
    {
        return "这个类是人类";   
    }
}

$r = new Ren("男");

二、继承:关键字 "extend"  如:class China extends Ren  {}  <-子类

1.做父类和子类的目的:让父类更好的控制子类,变量名和方法名必须统一

2.特点:

单继承:一个子类只能有一个父类,一个父类可有派生出多个子类(所有父类的对象都是object)

子类继承了父类的所有成员和功能方法,如果子类要另行添加成员和方法都可以

方法重写:在子类里面对父类的方法进行重写,如果我要保留父类的功能,再拓展一个功能例:

class Ren

  {

    public $name;

    function say()

      {

        echo $this->name."正在讲话";

      }

}

class China extends Ren    //子类China 继承了父类Ren的所有的成员和功能
{                                  //如果要另行添加成员或者方法都可以
    
    
    public $dizhi;
    function  say()              //在子类里面对父类的方法进行重写  ,如果我要保留父类的功能,再拓展一个功能
    {
        parent ::say();          //调用父类的say方法 ,在子类里调用父类的方法 :如果我要保留父类的功能,再拓展一个功能
        echo "中国人说话";    
    }                
}

3.① override:是重写的意思,子类对父类方法的重写  ②overload:Ⅰ.函数重载 Ⅱ.编译多态

三、多态:分为运行多态和编译多态,一般用运行多态

1.概念:

当父类引用指向子类实例,由于子类里面面对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同状态

2.条件:

必须发生在继承下

②子类必须重写父类方法

③父类引用调用该方法

3.注意:

如果一个方法需要一个父类的参数,可以给一个子类对象,例:怪兽吃人:不挑食,给父类可以,随便一个子类都可以吃

四、静态:关键字 static self   如: public static$v; 调用静态成员方法:(类名::$v)

                  方法也可以使静态:static function show() { echo self::$v}  self在(类)里面代表该类

1。类成员分为静态成员和普通成员

2.普通成员属于对象

3.静态成员属于类,静态相对于普通说的,方法也可以做成静态的

4.self关键字:在类里面代表该类

5.在静态方法里面不能调用不同成员(没法造对象)

6.在普通方法里面可以调用静态成员

7.静态是为了方便于使用类名就可以调用类里的成员和方法

class FenBi
{
    public $length;
    public static $color;        //关键字 static 定义静态成员 它属于这个FenBi类
        
    static function show()       //方法也可以是静态
    {
        echo "粉笔的颜色是:".self::$color;  //    "粉笔的颜色是:".FenBi::$color;也可以 ;  self在类里面代表该类
    }    
}

$v = new FenBi;      //先造一个对象

$v->length;        //要调用普通成员必须先有对象
FenBi::$color;                     //调用静态成员 ,要使用类名

五、抽象:(抽象类)关键字abstract   abstract class ***{}

1.把类进一步抽象:关键字abstrsct  如:abstract class ***  {}

2.特点:不能被实例化,只能被继承

3.目的:为了派生子类来使用,控制子类所有功能

例:
abstract class Dog
{
    public $name;   
    function Jiao()
    {
        echo "汪汪";
    }
}
class JinMao extends Dog
{   
}
$d = new Dog();

六、接口(面向对象的接口):关键字一:interface、    如:interface IUSB {}  (interface 代替 class)

关键字二:implements(实现): class Mouse implements IUSB {}( implements 代替extend)

归根结底就是一个抽象类,极度抽象的类,接口里面不能有成员变量,只能包含成员方法,成员方法可以没有函数体
接口关键字:interface(相当与类的class)
接口名称的规则:一般"I"开头 如 interface IUSB  {}
实现接口的类,必须实现接口里面所有方法

interface IUSB
{
    function read();        //必须要有读的方法
    function write();      //也必须要有写的方法
}
//鼠标驱动类
class Mouse implements IUSB      // implements 实现的意思
{
    function read()
    {
        echo "鼠标点击了";    
    }    
    function write()
    {
        echo "给鼠标一个指令";    
    }
}
$m = new Mouse();
$m->read();

七、设计模式

1、单例模式:目的是<只能>返回一个对象;类的计划生育;只能造一个对象出来

条件:

①让该类在外界无法造对象:用private 把类封闭起来

②让外界可以造一个对象,然后做一个静态方法来返回对象

③在类里面通过静态变量控制返回对象只能是一个

例:

class Dog
{
    static $dx;
    public $test;
    
    static function DuiXiang()
    {
        if(empty(self::$dx))
        {
            self::$dx = new Dog();    
        }
        return self::$dx;    
    }
}
$a = Dog::DuiXiang();
$b = Dog::DuiXiang();
$b->test="hello";
echo $b->test;
var_dump($a);

2、工厂模式:便于修改;做一个抽象类,派生出子类

//正常模式:
class YunSuan
{
    public $a;
    public $b;
    public function Jia()
    {
        return $this->a+$this->b;    
    }    
    public function Jian()
    {
        return $this->a-$this->b;    
    }
}

//工厂模式:
abstract class YunSuan
{
    public $a;
    public $b;
    
    function Suan()      //抽象类父类方法,为了供子类使用
    {
    }    
}
class Jia extends YunSuan
{
    function Suan()
    {
        return $this->a+$this->b;    
    }    
}
class Jian extends YunSuan
{
    function Suan()
    {
        return $this->a-$this->b;    
    }    
}
class Cheng extends YunSuan
{
    function Suan()
    {
        return $this->a*$this->b;    
    }    
}
$j = new Cheng;
$j = new Jian();
$j->a=5;
$j->b=10;
echo $j->Suan();

class GongChang
{
    static function ShengChan($v)
    {
        switch($v)
        {
            case "+":
                return new Jia();
                break;
            case "-":
                return new Jian();
                break;
            case "*":
                return new Cheng();
                break;    
        }    
    }    
}
$j = GongChang::ShengChan("*");
$j->a=10;
$j->b=5;
echo $j->Suan();

题外话:

1.函数重载:在类里面写多个同名方法来实现不同的功能

2.如何实现重载:

①.函数名必须相同

②.参数的个数不同或者参数个数相同的话,参数类型不同也可以

public static $color;

PHP其它常用函数;<<<面向对象(OPP)的三大特性:封装、继承、加态:>>> <----面试题 ;构造方法、析构方法,魔术方法、set、get方法;静态;抽象类;接口的更多相关文章

  1. Python面向对象之:三大特性:继承,封装,多态以及类的约束

    前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情 ...

  2. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  3. 面向对象(OPP)的三大特征之 继承

    OPP(面向对象编程的缩写)的三大优势: 1.继承 2.封装 3.多态 一.继承 1.继承:是两个对象之间的一种关系 a继承b 例如王思聪继承王健林 在OPP中继承是描述类与类之间的一种关系 2.继承 ...

  4. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  5. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  6. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  7. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  8. day31 Pyhton 面向对象的基础 三大特性

    一.内容回顾 封装 1.概念 笔记 2.__名字 在类的外部就不能用了 3.私有化的 不能被子类继承,也不能在其他任何类中调用 三个装饰器方法(装饰类中的方法) 1.不被修饰的  普通方法,会使用对象 ...

  9. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

随机推荐

  1. 【HTML5】表单属性

    * autocomplete autocomplete 属性规定 form 或 input 域应该拥有自动完成功能. 注释:autocomplete 适用于 <form> 标签,以及以下类 ...

  2. 【HTML5】地理定位

    <!DOCTYPE html> <html> <body> <p id="demo">点击这个按钮,获得您的坐标:</p> ...

  3. Dialog对话框

    1.显示内容 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle(&q ...

  4. Hue中给BI分配的权限

    请保留hive的查询权限. 这个权限并不是分配给某个账户,而是分配给用户组.然后再将用户分入用户组中.

  5. POJ2047 Concert Hall Scheduling(最小费用最大流)

    题目大概是有两个音乐厅,有n个乐队申请音乐厅,他们必须从第ii天到第ji天连续开音乐会且他们的开价是wi,每天每个音乐厅都只能供一个乐队进行音乐会.问接受哪些乐队的申请,获利最多能多少. 这题相当于在 ...

  6. !cocos2d ccdictionary->retain()的问题

    我再a类当中生命了一个dict,将它带入到b类当中,但没有在b类初始化时retain,于是在update当中找不到了.啃爹不.记得retain()

  7. BZOJ1829 : [Usaco2010 Mar]starc星际争霸

    设出$x,y,z$三个未知量分别表示三种单位的战斗力. 那么各种不等式都可以表示成$ax+by+cz\geq 0$的形式. 注意到$z>0$,那么两边都除以$z$得到$ax+by+c\geq 0 ...

  8. Codeforces Round #207 (Div. 2) A. Group of Students

    #include <iostream> #include <vector> using namespace std; int main(){ ; cin >> m ...

  9. 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...

  10. 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1054 一开始我还以为要双向广搜....但是很水的数据,不需要了. 直接bfs+hash判重即可. # ...