面向对象
- 万事万物皆对象
面向对象(英语:Object-oriented programming,缩写:OOP)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。
- 类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作
- 对象 − 是类的实例。
php 类
创建一个简单的类
<?php
class MyClass{
}
?>
实例化对象类
<?php
class MyClass(){
}
$myclass = new MyClass();
?>
类的控制访问
- public(公有):公有的类成员可以在任何地方被访问。
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。
类的属性与方法
属性-> 就是类里边的变量
方法-> 类里边的方法
<?php
class MyClass(){
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
public function aa(){
echo "你好在做什么";
}
}
$myclass = new MyClass();
$myclass->aa();
?>
类的常量
- const 关键字
class MyClass
{
const constant = '常量值';
function show() {
echo self::constant;
}
}
echo MyClass::constant ;
类的构造方法和析构方法
<?php
class MyClass(){
function __construct() {
echo "构造方法";
}
function __destruct() {
echo "析构方法";
}
}
$myclass = new MyClass();
?>
类的继承以及final
- extends 关键字
<?php
class BaseClass {
function aa() {
echo "BaseClass 类中方法";
}
}
class SubClass extends BaseClass {
}
$sub = new SubClass();
$sub->aa();
?>
- final 关键字
<?php
final class BaseClass {
function aa() {
echo "BaseClass 类中方法";
}
}
class SubClass extends BaseClass {
}
$sub = new SubClass();
$sub->aa();
?>
调用父类构造方法
- parent 关键字
<?php
class BaseClass {
function __construct() {
echo "BaseClass 类中构造方法";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
echo "SubClass 类中构造方法";
}
}
?>
static关键字
<?php
class a{
public static $s = "123";
}
echo(a::$s);
?>
命名空间
namespace 必须放在代码的第一行
<?php
namespace v;
class a{
}
function aa(){
}
var_dump(new v\a())//调用
?>
- 以下类型会受到命名空间的影响
类(包括抽象类,traits),接口,函数,常量
- 简单调用命名空间的类
use v\a;
var_dump(new a());
- 重命名
use v\a as a2;
var_dump(new a2());
导入函数
<?php
use function v\aa;
aa();
?>
导入函数
<?php
use const v\aa;
echo aa;
?>
类的自动加载
__autoload()函数 php内置的
<?php
function __autoload($className){
require $className.".php";
}
$im = new im();
spl_autoload_register( function ($className){
require $className.".php";
});
?>
后期的静态绑定
魔术变量
class Test{
private $abc = '';
public function setAbc( $val ){
$this->abc = $val;
}
public function getAbc( $val ){
$this->abc;
}
}
$test = new Test();
$test->setAbc("abc");
var_dump($test->getAbc());
- __set
- __get
class Test{
private $abc = '';
public function __set( $name,$val ){
$this->$name = $val;
}
public function __get( $name ){
$this->$name;
}
}
$test = new Test();
$test->abc = '1234567';
var_dump($test->abc)
- isset
class Test{
private $abc = 'abc';
public function __isset($val){
return isset($test->$val) ? true : false;
}
}
$test = new Test();
var_dump(isset($test->abc));
- __unset
class Test{
private $abc = 'abc';
public function __unset($val){
echo("__unset:" . $val);
unset($this->$val);
}
}
$test = new Test();
unset($test->abc);
- __call
class Test{
public function __call($func,$cs){
echo($func);//方法名
print_r($cs);//传入的参数
}
}
$test = new Test();
$test->go(1,ok);
- __callStatic
class Test{
public static function __callStatic($func,$cs){
echo($func);//方法名
print_r($cs);//传入的参数
}
}
Test::go();
- __invoke 当对象被当作函数调用时执行的
class Test{
public function __invoke($func){
var_dump($func);
}
}
$test = new Test();
$test("asadasd");
- __toString 当你打印对象的时候执行
class Test{
public function __toString(){
return "hello....";
}
}
$test = new Test();
echo($test);
对象拷贝和类型约束
- 浅拷贝
class A{
public $age = 10;
public $name = "";
public $name = null;
}
$a = new A();
$b = $a;
$b->age = 1;
var_dump($a->age);
- 深拷贝
class A{
public $age = 10;
public $name = "";
public $name = null;
}
$a = new A();
$b = clone $a;
$b->age = 1;
var_dump($a->age);
- 类型约束
class A{
public $name = "";
public function go(){
echo "12345678900987654321";
}
}
function text(A $a){
$a->go();
}
text(new A());
Trait关键字
php单继承 只能继承一个类
trait Bt{
public function a(){
echo "aaa";
}
public function b(){
echo "bbb";
}
public function c(){
$this->a();
$this->b();
}
}
class Text{
use Bt;
}
$test = new Test();
$test->c();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。