PHP -- 类语法

xiaoxiao2021-02-28  53

1.类成员语法

<?php class A { /* 访问修饰符 * java中有公用 私有 包类可见(受保护) 空(介于公用和私有之间) * php 只有三个 public private protected 不能为空 * */ public $i = 5; public static $y = "static string\n"; /* 构造方法 * */ function __construct(){ echo "这是构造方法\n"; } function fn(){ /* 方法内部无法访问字段,必须配合this * 类似js中方法访问内部字段需要使用this * */ echo $this -> i; echo '这是一个方法'; } /* 静态方法 * self指向本类(可以在静态/非静态) * $this指向本类(只能在非静态使用) * */ static function fn_2(){ echo self::$y;//相当于外部调用(A::$y) echo "这是一个静态方法\n"; } } /* 静态方法调用 * */ A ::fn_2(); echo A::$y; $a = new A(); /* 不可思议之一 -- 多次调用构造方法 * */ $a -> __construct(); //print_r($a); //$a->fn(); /* 如js一样动态添加属性/方法 * */ $a->x = 'test add'; echo $a->x; echo "\n"; /* 删除$a中的一个元素 * */ unset($a->x); /* 此遍历相当于js中的for in * */ foreach($a as $k=>$v){ echo "$k:$v\n"; }

2. 类命名空间

<?php namespace a\b\c; class A { public $i = '这是A'; } namespace a\b\d; /* 导入上个命名空间的class A(use 路径) * use as 用来解决命名空间中类名冲突 * new A()就是d下的A,想得到c下的A就new CA(); * */ //use a\b\c\A; use a\b\c\A as CA; class A { public $b = '这是B'; } $a = new CA(); print_r($a);

3. 类语法 – 多态

3.1 继承

<?php /* 类似与java final修饰后不能继承/重写 * */ class A { public $text = "测试父类继承"; function __construct() { echo "创建了一个A\n"; } function fn() { echo "这是父亲的方法\n"; } } class B extends A { /* 在java中 构造方法不会被重写,不会被继承 * 在构造方法中调用父类构造方法,用super(),且只能调用一次且放在首行。 * * 在js中 子类不能写构造方法。但是能被继承 * * 在php中 构造方法会被重写,会被继承。 * 在构造方法中调用父类构造方法,用parent::(无次数,位置限制) * */ function __construct() { parent::__construct(); parent::__construct(); echo "创建了一个B\n"; } function fn() { /* java调用父类的方法是 super.fn(); * js super.fn(); * php 见下 parent::fn(); * */ parent::fn(); echo "这是重写A的方法"; } } $b = new B(); $b->fn(); //print_r($b);

3.2 抽象

// 类似于java abstract class AbstractClass{ // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n";

3.3 接口

<?php // 声明一个'iTemplate'接口,类似于java interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 // 下面的写法是正确的 class Template implements iTemplate { public $lists = array(); public function setVariable($name, $var) { $this->lists[$name] = $var; } public function getHtml($template) { echo "{$template}"; } } $template = new Template(); $template->getHtml('测试'); $template->setVariable('张三', '250'); echo $template->lists['张三'];

3.4 延迟静态绑定

延迟到方法执行时,才绑定。 <?php class A{ const XX ="这是A的常量\n"; public function fn(){ /* 使用self:: 会绑定A中的常量XX * 使用static:: 延迟静态绑定为B的常量XX * (B中有常量XX,若无为A中的常量) * */ echo static::XX; } } class B extends A{ const XX ="这是B的常量\n"; } $b = new B(); $b->fn(); 5.5 流程处理函数 die/exit 退出 include eg: include 'URL'; include_once ps:用法和includ一样,主要用于区别函数的两次导入会报错 require,require_once ps:用法和include一样,但是include出错是警告,require会终止程序执行。 return 返回值; ps:在函数中使用global $ireturn $i一样 /* 老版本的php加载其他php方式 * 要求 文件名和类名必须一致 * 新版本 spl_autoload_register(); * */ function __autoload($cn){ return "$cn.php"; } spl_autoload_register();
转载请注明原文地址: https://www.6miu.com/read-55793.html

最新回复(0)