JS面向对象:
1.什么是面向对象
面向对象是一个思想,就是把解决问题的注意力集中到对象上。 面向对象有三大特点 :封装 继承 多态 封装:就是把属性私有化,提供公共方法访问私有对象继承:当多个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它类继承这个父类
多态:就是“一种定义,多种实现”。方法重载:在一个类中,允许多个方法使用同一个名字,但是方法的参数不同,完成的功能也不同
对象多态:子类对象可以与父类对象进行相互转换,而且根据其使用的子类的不同,完成的功能也不同
js可以模拟实现。arguments。2.
如果是方法中的this?
1.找到this 在调用方法时看方法前面的 "." 是谁,this就指向谁
2.替换this 将this换成你找到的那个结果
3.精确查找 用原型链接查找模式去分析
3.构造函数的返回值
构造函数是返回该类的实例,可以把这个类的实例当为构造函数的返回值,因为构造函数的返回值类型总是当前类,因此无须定义返回值类型
php面向对象
一、php面向对象基础实践
通过对象的编程方式,可将实现生活中的一切事物以对象的形式表现出来。
* 本示例:定义一个“人”类
* $name : 对象中的成员属性,在此类中表示人的姓名
* say() : 对象中的成员方法,在此类中表示人说话的方法
* $this : PHP中的伪变量,表示自身的类
* __construct() : php中的魔术方法,构造函数,在实例化类时自动执行
二、面向对象编程实践
2.1 类的继承:extends 关键字
案例:创建一个“人”类做为父类,继承的子类都拥有其父类的成员属性、方法
class
Human
{
public
$name
;
public
function
say()
{
echo
"父类说话的方法,姓名:"
.
$this
->name.
"\n"
;
}
public
function
eat()
{
echo
"父类吃饭的方法\n"
;
}
}
2.2 方法重写:子类重写父类的方法
class
Human
{
public
function
say()
{
echo
"父类说话的方法"
;
}
}
2.3 访问控制:public protected private 关键字
Public :修饰的属性和方法,子类都可以继承。定义公共的成员属性或方法,任何地方都可使用
Protected:修饰的属性和方法 子类都可以继承。定义受保护的成员属性或方法,只允许类本身或子类使用
Private:修饰的属性子类也可以继承。定义私有的成员属性或方法,只允许类的本身使用
2.4 static(静态)关键字
1)、静态属性用于保存类的公有数据
2)、静态方法里面只能访问静态属性或方法,不能使用 $this 伪变量
3)、静态成员不需要通过 new 关键字来实例化对象就可访问使用
class
Human
{
static
$name
=
"张三"
;
static
function
say()
{
echo
"我的姓名叫:"
.self::
$name
;
}
}
//外部使用静态成员属性或方法
echo
Human::
$name
;
Human::say();
2.5 final关键字:不允许成员方法被重写,不允许被继承
案例:对于“运动员”这个类,不希望它再创建子类
class
Student
extends
Sport
{
public
$name
;
}
//实例化 Sport 类 ,调用 eat() 方法
$nba
=
new
Sport();
$nba
->eat();
//实例化 Student 类 ,给 name 属性负值
$obj
=
new
Student();
$obj
->name =
"张三"
;
2.6 数据访问:$this self parent 关键字
$this:伪变量,代表类的本身,可访问本类及父类中的成员属性与方法
Self:访问类中的静态成员属性或方法。指向类本身
Parent:访问父类的成员属性或方法
2.7 接口:把不同类的共同行为方法进行定义,但不具体实现,由子类来实现具体的方法
定义接口关键字:interface实现接口方法关键字:implements
2.8 多态:比如接口A有两个实现B和C,B和C对A接口里面定义的方法实现可以是不同的,这种现象称之为多态
2.9 抽象类:介入接口与类的定义之间,允许类里面一部分方法不实现,实现一部分有相同功能且不会更改的方法。然而接口类里面不允许有任何实现的方法
定义抽象类关键字:abstract
三、php面向对象特殊实践
当对象访问不存在的方法时,自动执行该函数。也称之为“方法重载”
* $fun : 方法名称
* $param : 传递的参数
当对象访问不存在的静态方法时,自动执行该函数。
* $fun : 方法名称
* $param : 传递的参数
$obj = new Object(); //实例化对象时,调用__constructor()方法
echo obj; //将对象以字符串形式输出时,调用__toString()方法
$obj
->runTest();
//当调用对象中不存在的方法时,执行__call()方法
$obj
::runTest();
//当调用对象中不存在的静态方法时,执行__callStatic()方法
$obj
->name;
//当调用对象中不存在的成员属性时,执行__get()方法
$obj
->name =
"张三"
;
//当给对象中不存在的成员属性赋值时,执行__set()方法
$obj2
=
clone
$obj
;
//当对象被克隆时,执行__clone()方法