php面向对象要学多久,如何在线学习PHP开发(五)面向对象

面向对象编程的基本概念

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

类和对象的关系

fea0e9449bdc

image.png

类的概念

fea0e9449bdc

image.png

对象的概念

fea0e9449bdc

image.png

类和对象的关系

fea0e9449bdc

image.png

类的声明和对象的创建

fea0e9449bdc

image.png

如何声明一个类

fea0e9449bdc

image.png

如何创建一个对象

fea0e9449bdc

image.png

fea0e9449bdc

image.png

类的属性和方法

fea0e9449bdc

image.png

属性的定义

fea0e9449bdc

image.png

方法的定义

fea0e9449bdc

image.png

属性和方法的访问

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

对象的比较

fea0e9449bdc

image.png

不使用命名空间

fea0e9449bdc

image.png

使用命名空间

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

构造方法

fea0e9449bdc

image.png

fea0e9449bdc

image.png

构造方法的声明

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

析构函数与PHP的垃圾回收机制

fea0e9449bdc

image.png

析构函数

fea0e9449bdc

image.png

垃圾回收

fea0e9449bdc

image.png

class Person{

public function __construct()

{

echo '有新对象创建了
';

}

public function __destruct()

{

echo '对象被销毁了
';

}

}

$person = new Person();

echo xdebug_debug_zval('person');

//unset($person); // 显示销毁$person指向的Person对象

$person = 10; // 赋值也可以销魂Person对象

echo xdebug_debug_zval('person');

echo '


';

fea0e9449bdc

image.png

class Person{

public function __construct()

{

echo '有新对象创建了
';

}

public function __destruct()

{

echo '对象被销毁了
';

}

}

$p1 = new Person();

echo xdebug_debug_zval('p1');

$p2 = $p1;

echo xdebug_debug_zval('p1');

unset($p1);

echo xdebug_debug_zval('p2');

echo '


';

fea0e9449bdc

image.png

class Person{

public function __construct()

{

echo '有新对象创建了
';

}

public function __destruct()

{

echo '有对象被销毁了
';

}

}

/**

* 有多少个对象创建就有多少个对象销毁

*/

$p1 = new Person();

$p2 = new Person();

$p3 = new Person();

$p1=$p2=$p3=new Person();// 只有一个对象创建和销毁

fea0e9449bdc

image.png

class Person{

public function __construct()

{

echo '有新对象创建了
';

}

public function __destruct()

{

echo '有对象被销毁了
';

}

}

$p1[] = new Person();

echo xdebug_debug_zval('p1');

$p1[] = &$p1;

echo xdebug_debug_zval('p1');

unset($p);

echo xdebug_debug_zval('p1');

echo '


';

fea0e9449bdc

image.png

面向对象和面向过程实例的对比

面向过程的

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

面向对象的

class User{

public $userInfo = array();//用户信息

public $userName = '';//可查询的用户名

/**

* 构造方法

* User constructor.

* @param $userName string 用户名

*/

public function __construct($userName)

{

$this->userName = $userName;

}

/**

* 获取用户信息

* @return array 用户信息

*/

public function getUserInfo(){

// 1.连接数据库,mysqli_connect 返回的是一个数据库连接句柄,如果连接失败,返回false并输出相关错误信息

$link = mysqli_connect('localhost','root','123456', 'test');

if(!$link){

die('数据库连接失败,错误代码:'.mysqli_connect_errno().'错误信息:'.mysqli_connect_error().'
');

}

$sql = "select * from test where name='{$this->userName}'";

$result = mysqli_query($link, $sql);

$this->userInfo = mysqli_fetch_array($result);

return $this->userInfo;

}

}

$user= new User('lxy');

$userInfo = $user->getUserInfo();

print_r($userInfo);

面向对象三大特征之封装

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

面向对象编程三大特性之继承

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

普通方式

// 普通方式描述三个类Animal、Dog、Cat

class Animal

{

public $name = 'Animal';

public function shout()

{

echo '动物叫';

}

}

class Dog{

public $name = 'Dog';

public $owner = 'D';

public function shout(){

echo '狗叫';

}

public function swim(){

echo '狗游泳';

}

}

class Cat{

public $name = 'Cat';

public $owner = 'C';

public function shout(){

echo '猫叫';

}

public function eatFish(){

echo '猫吃鱼';

}

}

$dog = new Dog();

echo $dog->name;

echo $dog->shout();

继承方式

// 继承

class Animal

{

public $name = 'Animal';

public function shout()

{

echo '动物叫';

}

}

class Dog extends Animal {

public $owner = 'D';

// 重写

public function shout()

{

echo '狗叫';

}

public function swim(){

echo '狗游泳';

}

}

$dog = new Dog();

echo $dog->name;

echo $dog->owner;

echo $dog->shout();

echo $dog->swim();

fea0e9449bdc

image.png

fea0e9449bdc

image.png

访问控制修饰符

fea0e9449bdc

image.png

方法重载和方法重写

fea0e9449bdc

image.png

fea0e9449bdc

image.png

// PHP模拟JAVA的方法重载

class Person

{

public function test()

{

echo 'Person->test()
';

echo '参数个数:'.func_num_args();//获取方法调用时的参数个数

print_r(func_get_args());//获取方法调用时的参数值

$args = func_num_args();

$args_arr = func_get_args();

switch($args){

case 0:

echo '这是没有参数调用
';

break;

case 1:

echo '这是有1个参数的调用
';

break;

case 2:

echo '这是有两个参数的调用
';

break;

default:

echo '未定义的参数调用方式
';

break;

}

}

/**

* 在JAVA中实现方法重载

* @param $a

* @param $b

*/

/* public function test($a,$b){

}*/

}

$a = new Person();

$a->test(); // Person->test()

$a->test('我叫a');// Person->test()

fea0e9449bdc

image.png

// PHP模拟JAVA的方法重载

class Person

{

public $name;

public function __construct($name='a')

{

$this->name=$name;

}

public function test()

{

echo '我是父类的test方法
';

}

}

class Stu extends Person{

public $age;

function __construct($name = 'a', $age = 22)

{

$this->name = $name;

$this->age = $age;

}

public function test()

{

echo '我是Stu里的test方法
';

}

}

$b = new Stu('b',22);

echo $b->test();

this关键词

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

实例

fea0e9449bdc

image.png

class Person

{

private $work_year = 0; // 工龄

private $salary; // 工资

/**

* 获取工龄

* @return int

*/

public function getWorkYear()

{

return $this->work_year;

}

public function setWorkerYear($year = 0)

{

$this->work_year = $year;

}

/**

* 获取工资

* @return int

*/

public function getSalary()

{

// 通过工资工龄的对应关系计算工资

$payoff = new PayOff();

// 通过发工资类的一个方法计算工资

// 谁调用获取工资的方法,$this指向谁

$this->salary = $payoff->pay($this);

return $this->salary;

}

}

/**

* 工资和工龄对应关系类

* Class PayOff

*/

class PayOff {

public function pay(Person $person){

$salary = 0;

$year = $person->getWorkYear();

if($year<=1){

$salary=1000;

}elseif($year>1 && $year<3){

$salary = 2000;

}elseif($year>=3){

$salary = 3000;

}

return $salary;

}

}

$a = new Person();

echo '工龄:'.$a->getWorkYear().'工资是:'.$a->getSalary();

$a->setWorkerYear(10);

echo '工龄:'.$a->getWorkYear().'工资是:'.$a->getSalary();

self与parent

fea0e9449bdc

image.png

self关键词及用法

fea0e9449bdc

image.png

class Person{

public $name = 'A';

public static $age = 22; //static修饰的是静态属性

public $self = null;

public function intro(){

echo 'My name is'.$this->name.'
';

// 静态属性必须使用类名调用

echo 'My age is'. self::$age;

echo 'My age is'.self::getAge();

$this->self = new self(); // 相当于new Person()

}

public static function getAge(){

return self::$age;

}

}

$a = new Person();

$a->intro();

parent关键词及用法

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

fea0e9449bdc

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值