面向对象知识点
主要介绍了PHP面向对象程序设计方法,结合实例形式详细分析了PHP面向对象程序设计中所涉及的类的概念、定义、构造函数、析构函数、继承、重写,$this 和:: 需要的朋友可以参考下
一、概念
面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构,它能使代码更加简洁,更易于维护,并且具有更强的可重用性。
二、定义类
定义:类的变量 属性的声明有: private > protected > public 数据类型:1、基本数据类型(整型int、浮点型float、字符串string、布尔bool);2、复合数据类型(数组array、对象object);3、特殊数据类型(null、资源)
class 类名 { }
三、定义属性和方法
公有的 public
public $name;
受保护的 protected
protected $age;
私有的 private
private $id;
1、方法
public function study(){
echo "在学习";
}
四、访问属性和方法
1、访问属性
需要先实例化对象 new
$opp = new 类名;
$opp -> study();
2.方法的参数
public function study(){
...
}
3.方法默认值
public function study($name="小明"){
echo $this -> name;
}
4.方法返回值
return '需要返回的值';
五、修改属性的值
1.直接修改
public $name="要修改的值";
2.使用方法修改$this
$this -> name="要修改的值";
六、权限修饰符
公有的 public
私有的 private
受保护的 protected
七、构造方法
public function _ _construct(){
...
}
八、析构方法
public function __destruct(){
}
九、继承
可继承父类的成员变量,允许定义父类没有的成员变量。
关键字 extends
格式 class 类名 extends 需要继承的类{
...
}
1.单继承
PHP是单继承的,一个扩充类只能继承一个基类,但一个父类却可以被多个子类所继承。子类不能继承父类的私有属性和私有方法。在PHP 5之后的版本中,类的方法可以被继承,类的构造函数也能被继承。当子类被实例化时,PHP会先在子类中查找构造方法,如果子类有自己的构造方法,PHP会优先调用子类中的构造方法;当子类中没有时,PHP会转而去调用父类中的构造方法。
class Person
{
public $name;
protected $age;
}
class Man extends Person
{
public $sex;
public function sayName(){
echo $this -> $name="小红";
}
}
$people = new Man();
$people -> sayname();
2.重写
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,该过程叫做方法的覆盖(override ),也称为方法的重写。在对父类的方法进行重写时,子类中的方法必须与父类中对应的方法具有相同的名称。
重写时方法的权限修饰符不能比父类严格
<?php
class person
{
public $name;
public function __construct(){
$this->name="小娃";
}
public function sayName(){
echo "我是小娃";
}
}
class Student extends person
{
public $student_number;
public function sayName()
{
echo "我是小洋";
}
}
$person = new Student();
$person ->sayName();
十、$this-> 和:: 的使用
1、this
系统会给每个对象分配this,代表当前对象 this 只能在类内部方法中使用,不能在类定的的外部使用。
$this->name;
$this->name=" ";
2、::
相对只能在类内部使用的伪变量$this-> 来说,操作符“:: ”更为强大。它可以在没有声明任何实例的情况下访问类中的方法或变量。其使用格式如下:
关键字::变量名/常量名/方法名
parent::study();
此处的关键字可以为以下3种情况。 parent :用于调用父类中的成员变量、成员方法和常量。 self :用于调用当前类中的静态成员和变量。 类名 :用于调用本类中的变量、常量和方法。
<?php
class person
{
public $name;
public function __construct(){
echo 1;
}
}
class Student extends person
{
public function __construct()
{
person::__construct();
echo 2;
}
}
$person = new Student();
输出结果为12
十一、静态变量(方法)
1、static 关键字
static 关键字的作用是将类的成员属性或成员方法标识为静态 的
类调用:名::静态成员属性名; 类调用:类名::静态成员方法名(); 对象调用:对象名::静态成员属性名; 对象调用:对象名::静态成员方法名;
<?PHP
class People
{
public static $age=19;
public static function getAge()
{
echo "调用静态方法";
}
}
echo People::$a;
echo People::getAge();
$example = new People();
echo $example::$a;
echo $example::getAge();
?>
2、self
访问静态变量
class Person4
{
public static $age = 21;
public $age2 = 30;
public function getAge()
{
echo self::$age;
self::$age++;
echo '<br />';
}
public static function getAge2()
{
echo '我的年龄是:' . self::$age;
echo '<br />';
}
}
十二、final
如果父类中的方法被声明为final,则子类无法覆盖该方法,如果一个类被声明为final,则不能被继承
final class People{
...
}
class People{
final function Man(){
...
}
}
十三、const 常量
const 是一个定义常量的关键字。调用const 常量和静态成员(static )是一样的。在类外通过类名访问,在成员方法中使用self 关键字进行访问。注:const标识的常量是一个恒值,不能重新赋值,所以一定要在定义的时候初始化。使用 const 声明的常量名称前不能使用$ 符号,并且常量名通常是大写。
class Person
{
const NUMBER=123;
public function Man()
{
echo self::NUMBER;
echo Person::NUMBER;
}
}
$a= new Person();
$a ->Man();
十四、抽象类和抽象方法
abstract
1、抽象类
abstract class Person
{
static public $age=19;
}
echo People1::$age;
2、抽象方法
只要类中存在一个抽象方法,那这个类就必须为抽象类,方法抽象后在子类必须重写
abstract class People1
{
public $age=19;
public abstract function getAge();
}
class Person1 extends People1
{
public function getAge()
{
echo 2;
}
}
$a= new Person1();
$a->getAge();
十五、魔术方法
1、__set()
在给不可访问属性赋值时,__set() 会被调用 语法为__set ($name ,$value )。 参数$name是指要操作的变量名称
class Magic
{
public function __set($name, $value)
{
echo '__set()执行,';
}
}
$test = new Magic();
$test->name="小娃";
2、__get()
当读取不可访问属性的值时,__get() 会被调用 语法为 __get ($name ) $name 指要操作的变量名称
class Magic
{
private $age=19;
public function __get($name)
{
echo '__get()执行';
}
}
$test = new Magic();
$test->name;
$test->age;
3、__call()
当读取不可访问属性的值时,__call() 会被调用 语法为 __call ($name ,$params ) $name 指要操作的变量方法 $params 为数组
class Magic
{
public function __call($name, $params)
{
echo '__call()执行';
echo '你调用了不存在的方法:' . $name;
echo '<br />';
echo '传递的参数为:';
print_r($params);
}
}
$test = new Magic();
$test->name(1,2);
3、__toString()
class Magic
{
public function __toString()
{
return "123";
}
}
$test = new Magic();
echo $test;
|