魔术函数、魔术常量,抽象类、方法
魔术函数
__construct() 构造函数 __descturct() 析构函数
魔术常量
__LINE__ 输出当前代码所在行 __FILE__ 输出当前文件的物理位置 __DIR__ 输出当前文件的路劲
__CLASS__ 输出所在的类 //不在类中不输出 __FUNCTION__ 输出所在函数 //不在类中不输出
//抽象类结构 abstract class Animal { public $name; protected $age; abstract public function cry();//抽象方法,不能包含方法体({...}) public function getname() {//实现方法 return $this->name; } }
class Cat extends Animal { public function cry() { echo"实现抽象方法"; } }
抽象类特点:
1.只需(能)被继承,不需(能)实例化;2.抽象类可以不包含抽象方法;3.只有抽象类才能包含抽象方法4.一个子类继承抽象类,必须实现抽象方法,或者将自身声明为抽象类
目的:提高代码复用性,同时有利于设计类。
面向对象便会有接口的概念 interface
//定义规范和平级实现 interface iUsb {//规范了方法名和传入参数 public function start(); //接口中的方法不能有方法体。 public function stop(); }
//实现接口
//相机类
class Camera implements iUsb { //可以同时实现多接口 public function start() //必须实现接口中的所有方法 { echo"相机开始工作了"; } public function start() { echo"相机停止工作了"; } }
//手机类
class Phone implements iUsb { public function start() { echo"手机开始工作了"; } public function start() { echo"手机停止工作了"; } }
接口:可以理解为更加抽象的抽象类,体现了高内聚(封装性),低耦合(模块干扰性)
特点:
接口不能被实例化。
接口中可以有属性,但是必须是public const A =90;常量没有$符号,public const,使用接口名::常量名,一般大写.
接口中的属性和方法必须是public ---从逻辑上是合理的。
对比:
继承:体现的编程思路线型实现(继承)。
接口:体现的编程思路星型实现,达到高内聚,低耦合。
接口与继承类的区别
(单)继承的好处和局限性:好处:与c++的多继承相比,单继承保证了类内的纯洁性,(避免不同类间的干扰)
局限性:功能扩展受限,内聚和耦合性差
接口:在不打破类层级关系(继承关系)的基础上,实现功能扩展。
final 类:希望某个类不被其他类继承(可能出于安全考虑等)
final 方法:希望某个方法不被其他方法重写(可能出于安全考虑等)
final 不能修饰属性 ---逻辑上是合理的。
const //全局数据区的都是属于类,而非类的对象
基本用法:const ABC = 123;
类外部访问:
类名::ABC 接口::ABC
类内部访问
类名::ABC 接口::ABC self::ABC
1.常量在被定义时必须给出值。2.无需修饰符3.不能再被修改,否则报错。
C#面向对象编程:就是使用方法类和实体类的编程思路
php面向对象编程:就是使用类的编程思路
以上是编程最优先考虑的思路
知识小点:
php类文件:Abc.class.php
文件的引用:require_once "Abc.class.php"
客户端数据校验 js isNAN(x) 不是数,返回一个真。
onsubmit="return chech()"
document.getElementById("num1").value;
服务器端数据校验 if(!isset($_REQUEST['num']))
php的实体类 class Word { private $en; public function setEn($en) {//不同于.net的实体类机制,手动调用,用于取值,赋值。 $this->en=$en; } public functon getEn() { return $this-en; } }
$xmldoc=new DOMDocument();
$xmldoc->load("words.xml");
$en=$word->getEn();
$root=$xml->getElementById("words")->item(0);