面向对象

1.封装
将类里面的成员变量加一个private修饰符变成私有的,目的是为了保护类里面的成员不被外界随意访问,从而确保类的安全性。如果将变量设置为私有,如何去访问:
1.自己写函数get函数set函数,然后来对变量赋值和取值
2.用系统自带的__get()函数和__set()函数来实现类里面的变量赋值取值
function __set($name,$value)
{
$this->$name = $value;
}
function __get($name)
{
return $this->$name;
}
封装:访问成员变量的方法
public function SetAge($age)
{
if($age>18 && $age<80)
{
$this->age = $age;
}
}

封装:简便方法赋值
public function __set($name,$value)
{
if($name == "age")
{
if($value>18 && $value<80)
{
$this->$name = $value;
}
}
else
{
$this->$name = $value;
}

}
封装:简便方法获取值
public function __get($name)
{
return $this->$name;
}



public function Say()
{
echo $this->name."这个人在讲话";
}
构造函数,初始化
function __construct($name,$sex)
{
$this->name = $name;
$this->sex = $sex;
}
析构函数,在对象要销毁的时候自动调用,可以在里面进行释放内存,关闭连接等操作
function __destruct()
{
echo "该对象马上要销毁了";

2.静态
关键字:static ,如果成员声明了为静态的,那么该成员是属于该类的,不是属于对象的
如何调用静态的成员:
HaShiQi::$height = 10;
HaShiQi::Gao();
用类名加双冒号调用类的静态成员
class AA
{
const SS = 5; //定义常量
static public $cc;
static function Say()
{
echo "aaaaaaa";
}
}

}
3.继承
class Student extends Ren
{
public $class;

//父类方法重写
function Say()
{
parent::Say(); //调用父类中的方法
echo "这是子类中的方法";
}
}

final关键字,用来修饰类,如果把一个类定义成final类,该类就无法被继承

多态
①必须要发生在继承下
②子类对父类的方法进行重写
继承一般是单继承:一个儿子只能有一个父亲
子类可以继承父类的所有成员
子类可以对父类的成员方法进行重写:(函数名一样),如果要在子类方法中调用父类的方法,用parent::Jiao();
function Jiao()
{
parent::Jiao();

echo "hello";
}
final关键字可以定义该类为最终类,不可被继承

父类
class Ren
{
public $name;
public $age =10;
public $aa=17;
public function Say()
{
echo $this->name."正在说话";
}

function __construct($n)
{
$this->name = $n;
}
function __tostring()
{
return "成员变量name的值为:".$this->name."<br>"."成员方法Say()的作用是。。。";
}
function __clone()
{
$this->age = 18; //$this找的是复本
}
}
$ren = new Ren("aa");
$r1 = clone $ren; //克隆对象
var_dump($r1);
var_dump($ren);

子类
class China extends Ren
{
public function Say()
{
echo "你好";
}
}

父类引用指向子类实例,由于子类的不同,父类引用在调用方法时所表现出的差别

Ren r1 = new China();
r1.Say();
$ren = new China("hello");
$ren->Say();

5.面向过程

$r1 = 20;
$r2 = 10;

$mj = 3.14*$r1*$r1 - 3.14*$r2*$r2;

echo $mj;

5.面向对象
定义类

class Yuan
{
private $r;
function __construct($r)
{
$this->r = $r;
}
function Mj()
{
return 3.14*$this->r*$this->r;
}
}
$yuan1 = new Yuan(20);
$yuan2 = new Yuan(10);
echo $yuan1->Mj()-$yuan2->Mj()

$this关键字
$this->name;this代表该对象,如果要在成员方法中调用成员变量,一定要使用$this找出该成员变量

6.将类引入页面,加载类
include("0322class.php");
require_once("0322class.php");
include "0322class.php";
require_once "0322class.php";

7.自动加载类
function __autoload($classname)
{
require_once "class_".$classname . '.php';
}

$test = new Test();

var_dump($test);

原文地址:https://www.cnblogs.com/Yue0327/p/5338698.html