Php面向对象
开始接触php,奇怪的是,每次打PHP的时候,都会出现,拍*黄*片,觉得好搞笑
今天听了一上午的课,老司机讲的是,面向对象,世间万物皆对象~
以下是上课的笔记,和大家共享,不谢,多练习~
//面向对象
// 1 世间万物皆对象
//一个人,一个车,一架飞机,一个垃圾桶 一切可见之物都是对象,一切不可见之物(抽象事物)也可以是对象
// 2 对象包含两部分
//(1) 对象的组成元素 是对象的数据模型 用于描述对象的数据,又被称为对象的属性,或者对象的成员变量
//(2) 对象的行为 是对象的行为模型,用于描述对象能够做什么事情,又被称为对象的方法
//3 每个对象都是独一无二的 对象是一个特定事物,他的只能是完成特定功能
//面向对象 面向对象编程就是在编程的时候数据结构都通过对象的结构进行存储 (属性,方法)
//面向对象的基本思路
//(1) 识别对象 任何实体都可以被识别为对象
// (2) shi识别对象的属性
//(3) 识别对象的方法 对象自己属性数据的改变 对象和外部的交互
// 人 属性:头,身体,四肢,名字,身高,性别, 行为:吃喝拉撒。跑步,跳跃
//对象内部是高内聚的 所有对象相关的内容都封装到对象内部
//对象对外是低耦合的 外部世界可以看到对象的一些属性,外部世界可以看到对象的一些方法
//类的概念:物以类聚,把具有相似特性的对象归类到一个类中 类定义了这些相似对象拥有的相同的属性和方法 类的对象被称为类的一个实例,类的属性和方法统称为类成员
//类的实例化就是通过类定义创建一个类的对象
class People{
protected $height = "175";//身高属性
public $weight = "70";//体重属性
//构造函数
public function __construct()
{
// $this->weight = $we;
//
// $this->height = $he;
}
public function run(){
echo $this->height/$this->weight;
//
}
//析构函数
public function __destruct()
{
}
public function eat(){
echo 'shui';
}
}
//类的定义以关键字class开始,后面跟着类的名称,类的命名通常每个单词的第一个字母大写,以中括号开始和结束
// $obj = new People('180','70');
// $obj->run();
//$obj1= new People('175','60');
//
// $obj1->run();
//类到对象的实例化 类的实例化为对象时,用关键字new new之后紧跟类的名称和一对括号
//对象中的属性方法可以通过对象->符号来进行访问
//构造函数 在对象被实例化的时候自动调用 function __construct(){
//$this->
//}
//$this 是PHP里面的伪变量,表示对象本身。可以通过$this->的方式访问对象的属性和方法
// 析构函数 (在程序执行结束的时候自动调用)
//对象的继承 (拥有部分相同的属性和方法)
//继承的好处:父类里面定义的类成员可以不用再子类中重复定义,,节约了编程的时间
//同一个父类的子类拥有相同的父类定义的类成员
// 子类可以修改和调整父类定义的类成员 称之为重写 一旦子类修改了,就按照子类修改之后的功能执行
class Man{
protected $he = '8780';
public function __toString()
{
return 'xxxd';
}
public function __invoke()
{
echo 'xxxxxxxxxxxxx';
}
public function __call($aa, $arguments)
{
print_r($arguments);
}
public function __get($name)
{
echo $name;
}
public function __set($name, $value)
{
echo $name.$value;
}
public function __isset($name)
{
echo "xx";
}
public function __unset($name)
{
echo 'ttt';// TODO: Implement __unset() method.
}
public function __clone()
{
echo 'clone';
}
public static function __callStatic($name,$arg){
echo $name;
}
}
//用关键字extends来表示类的继承,后面跟父类的类名,后面只能跟一个类,这也是php的单继承原则
//在子类的对象上可以直接访问父类中定义的方法和属性。父类中的属性可以通过¥$this来访问
$obj6 = new Man();
Man::change();
//访问控制 //面向对象的三种访问权限 public protected private
//public 公有的类成员,可以在任何地方被访问
//protected 受保护的类成员,可以被其自身以及其子类访问
// private 私有的类成员,只能被自身访问
//魔术方法 __tostring() 当对象被当做string使用的时候,这个方法被自动调用
// __invoke() 当对象被当做方法调用的时候,这个方法被自动执行
// __call() 当对象访问不存在的方法名称时,方法被自动调用
// __callStatic() 当对象访问不存在的静态方法时被自动调用
//__get() 对象读取不可访问属性的值时,被自动调用
//__set() 再给不可访问属性赋值时,被自动调用
// isset 当对不可访问属性调用isset()或empty 时被自动调用
//unset() 当对不可访问属性调用unset() 时,被自动调用
// __clone()
//面向对象接口 接口就是把不同类的共同行为进行了定义,然后在不同类里面实现不同的功能
// 一旦某个类实现了接口,那么就必须实现接口定义的方法
interface Eat{
public function run();
public function jump();
}
interface Run extends Eat{
}
class Animal implements Run {
public function run()
{
// TODO: Implement run() method.
}
public function jump()
{
// TODO: Implement jump() method.
}
}
$obj8 = new Animal();
var_dump($obj8 instanceof Animal);
//用关键字interface 定义接口 用关键字implements 表示类实现了某个接口 接口不能被实例化
//instanceof 关键字用来判断某个对象是否实现了某个接口
// 当类实现子接口,父接口定义的方法也需要在这个类里面具体实现
//多态 :接口的方式实现可以有很多,多以对于接口里面定义的方法的具体实现是多种多样的,这种特性就叫多态
// 接口A有两个实现B和C B和C对A里面定义的方法的实现可以是不同的,这种现象就是多态
// 面向对象 抽象类
abstract class Pe{
abstract public function breath();
}
//抽象类中可以包含普通方法,也可以包含抽象方法
class Pt extends Pe{
public function breath()
{
// TODO: Implement breath() method.
}
}
//final 成员 不允许子类重写父类的方法 也可以表示不允许被子类继承
//静态成员 //保存的是全局的类的公有数据
class Tt{
public static $boss = "老板";//静态属性正在访问控制关键字后面添加static 关键字几口
public static function change(){
static::$boss;
//在类定义中使用静态成员的时候,用关键字self/static后面跟着::操作符,在访问静态成员的时候::后面需要跟$符号
//在类定义外部访问静态属性,我们可以用类名加::操作符的 方法来访问,
}
}
echo Tt::change();
//调用父类,用parent::访问 使用parent 关键字就能够访问父类的静态成员
// 1 静态属性用于保存类的公有数据
// 2 静态方法里面只能访问静态属性
// 3 静态成员不需要实例化对象就可以访问
// 4类的内部可以通过self或者static关键字访问自身静态成员
// 5 可以通过parent关键字访问父类的静态成员
//6 可以通过类的名称在类定义外部访问静态成员