PHP之面向对象学习
1、类
Class lio{
Public
Protect
Private
Function __constructor(){}
}
2、类的实例化
<?
php
class lio{
//定义属性,须要加权限修饰符
public $a="lveo";
//定义方法。须要加权限修饰符
public function running(){
echo 521;
}
public function lovea(){
echo "do something";
}
}
//类的实例化
$name=new lio();
//实例化对象的属性和方法訪问
echo $name->a;
$name->lovea();
?>
3、类的构造函数和析构函数
<?
php
class lio{
//定义属性,须要加权限修饰符
public $a="lveo";
//定义方法,须要加权限修饰符
public function running(){
echo 521;
}
public function lovea(){
echo "do something";
}
//不须要权限修饰符 public
function __construct($name){
echo "start";
//$this指实例化的对象
$this->name=$name;
}
function __destruct(){
echo "say goodBye";
}
}
//类的实例化
$name=new lio("sanmei ");
echo $name->name;
?>
4、析构函数
对象的赋值和引用,在对象$XXX=null;之后会产生不同结果
5、对象的继承(单继承)
<?php
class lio{
public $name='lio';
public $age=22;
//共同拥有方法
public function love(){
echo "love sanmei";
}
//不须要权限修饰符 public
function __construct($name){
echo "start\n";
//$this指实例化的对象
$this->name=$name;
}
}
//类son继承 lio
class son extends lio{
function __construct($name){
echo "$name".'1234';
}
}
//类的实例化
$name=new son("sanmei");
//继承中,使用父类的方法
$name->love();
?
>
6、訪问控制
Public :共同拥有的类成员
Private : 私有的类成员
Protect : 受保护的,子类能够訪问
<?
php
class lio{
public $name='lio';
public $age=22;
//共同拥有方法
public function love(){
echo "love sanmei";
}
//protect
protected $pro="baohu";
//private
private $pri="siyoude";
//不须要权限修饰符 public
/* function __construct($name){
echo "start\n";
//$this指实例化的对象
$this->name=$name;
} */
}
//类son继承 lio
class son extends lio{
public $pub="pub";
public function getpri(){
echo $pri;
}
//protect
protected $pro="baohu";
//private
private $pri="siyoude";
/* function __construct($name){
echo "$name".'1234';
} */
}
//类的实例化
$name=new son("sanmei");
//public能够訪问
echo $name->pub;
//protect仅仅在子类中
//通过public function 实现调用private属性
$name->getpri();
//private 仅仅在本类中
echo $name->pri;//会报错
?>
<?php
class fa{
public $a=123;
protected $b=234;
private $c=345;
public function xie(){
echo $this->c;//必须通过$this 来訪问
}
}
class son extends fa{
function __construct(){
$this->xie();
}
}
$na=new fa();
$na->xie();
?>
7、Static 静态keyword
<?php
class fa{
public $a=123;
protected $b=234;
private $c=345;
public static $d="love you";
public function xie(){
echo $this->c;//必须通过$this 来訪问
}
public function ss(){
//在类中静态属性通过self来定义
echo self::$d;
}
public static function dd(){
echo 1234;
}
}
class son extends fa{
function __construct(){
$this->xie();
}
//在子类中用parent来訪问 父类的静态变量
//echo parent::$d;
}
//在类外通过类名::直接訪问
echo fa::$d;
fa::dd();
//通过对象訪问
$na=new fa();
$na->xie();
$na->ss();
?
>
静态方法不能用$this来訪问
8、Final keyword,防止又一次赋值 重写
Fatal error: Cannot override final method bs::text() in D:\wamp\www\StudyObj\index.php on line 18
<?php
//假设类前加上final则该类不能被不论什么类继承的类,能够在class之前加入final
class bs{
final public $a=123;
public function a(){
echo 123;
}
//不能在子类中重写方法
final public function text(){
echo "1231321";
}
}
class son extends bs{
//重写,和父类一致的方法
public function a($temp='lio'){
echo $temp;
}
public function text(){
echo 2345;
}
}
$lio=new son();
$lio->a();
?>
9、数据訪问
重写过程中用parent::来訪问父类中的方法。常量不须要$
10、对象接口
<?php
//接口仅仅有方法声明
interface ss{
public function eat($food);
}
//继承接口的类必须实现方法体
class son{
public $a=123;
public function eat($food){
echo "lio eat".$food;
}
}
//继承接口的类必须实现方法体
class sonn{
public $a=123;
public function eat($food){
echo "lio drink".$food;
}
}
$lio=new son();
$li=new sonn();
$lio->eat('nice');
$li->eat('water');
var_dump($li instanceof ss);
function check($obj){
if(var_dump($obj instanceof ss)){
$obj->eat('lio');
}else{
echo "cant eat";
}
}
能够用extends 实现接口继承接口
?>
11、多态
就是同一个接口,不同类去继承的时候,实现的方法体可能会不一样,这样就造成了多态。极大地提高了灵活性
传入对象不同。实现的方法不同
var_dump($li instanceof ss);
function check($obj){
if(var_dump($obj instanceof ss)){
$obj->eat('lio');
}else{
echo "cant eat";
}
}
12、抽象类
方法能够实现也能够不实现。间与接口和类之间
<?
php
//抽象类里的方法能够实现,抽象方法仅仅有声明。没有方法实现,非抽象方法能够有方法体
abstract class lio{
public $a=123;
public function name($name){
echo $name;
}
abstract public function aa(){
echo 132123;
}
}
class son extends lio{
function __construct(){
echo "start";
}
}
$name=new son();
$name->name('Lio');
?
>
13、魔术方法--- __tostring()和__invoke()
当成字符串输出时
<?php
class lio{
function __toString(){
//必须是return
return "12345";
}
}
$name=new lio();
echo $name;
?
>
当成方法时
<?php
class lio{
function __toString(){
//必须是return
return "12345";
}
function __invoke($temp){
echo $temp;
}
}
$name=new lio();
$name(5);
?>
14、魔术方法--- __call和__callStatic
<?php
class lio{
//重载
public function __call($name,$arguments){
echo "wo ai sanmei";
}
public static function __callstatic($name,$arguments){
echo "static wo ai sanmei";
}
}
$name=new lio();
$name->asd('lio','lio');
lio::res('lio','lio');
?
>
15、魔术方法--- __get()和__set()
<?php
class lio{
public function __get($name){
return "123123";
}
public function __set($name){
echo 123123123;
}
}
$name=new lio();
//就像定义了一样去使用
echo $name->time;
$name->time=1231312321313;
?
>
16、魔术方法--- __isset()和__unset()
属性的重载
17、魔术方法--- __clone()
<?php
class lio{
public $name=123;
function __clone(){
//在clone的时候不一样
$this->name="love you";
}
}
$name=new lio();
$name->name='aaaaa';
echo $name->name;
$san=clone $name;
echo $san->name;
$san->name='sssssss';
echo $san->name;
//使用lone初始化的name,在改变数据但不影响原对象
$mei=clone $name;
?>
PHP之面向对象学习的更多相关文章
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...
- Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)
程序设计的三种基本结构: 面向对象,面向过程,函数式编程 1,什么是面向对象编程 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...
- Java面向对象学习目录
Java面向对象学习目录 以下为面向对象学习目录,有待补充的部分,我还会再后续的学习过程中加以补充与修改~ 一.面向对象编程思想 二.Java类及类中成员 属性 方法 构造器 代码块 内部类 面向对象 ...
- (转)Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- php面向对象学习
近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!! 面向对象的三大特性: 封装 -- 隐藏内部实现,稳定外部接 ...
- web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记
hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...
- 深入js的面向对象学习篇——温故知新(一)
在学习设计模式前必须要知道和掌握的***. 为类添加新方法: Function.prototype.method = function(name,fn) { this.prototype[name] ...
- js面向对象学习
纯属笔记,加强记忆,不是教程,欢迎纠错,没有逻辑,不太适合学习使用. -------------- 继承多态等太多概念难以理解,还是从实践中慢慢学吧!争取能大致看懂网上的开源的代码. -------- ...
- python面向对象学习(二)基本语法
目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ...
随机推荐
- LAMP第四部分 mysql相关
1. 忘记root密码http://www.lishiming.net/thread-252-1-1.html 进入mysqlwhich mysql/usr/local/mysql/bin/mysql ...
- linux系统程序设计教程
linux系统程序设计教程 第一章:生成一个Process(进程) 进程是什么?简单地说,进程就是在执行状态下的一个程序(包括CPU状态,所占内存的状态,等等) A进程生成了B进程,也就是说,A程序在 ...
- qw
// 主页 @RequestMapping(value = "/home") public ModelAndView home() { ModelAndView MV = new ...
- html5拖动文件上传
使用html5的fileReader api <!DOCTYPE html><html lang="en"><head> <meta ch ...
- 标准IO与文件IO 的区别
先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存 ...
- 【HDOJ5559】Frog and String(构造)
题意:给定n,m,k,要求构造出一个长度为n,最多使用前k个大写字母,有m个不同回文子串的字符串 1<=n,m<=1e5,1<=k<=26 思路:打表找规律 本质上是要找到不让 ...
- [CODEVS1051]接龙游戏
题目描述 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. 输入描述 Input D ...
- Codeforces 935D Fafa and Ancient Alphabet
题目链接 题意 给定两个\(n\)位的\(m\)进制数\(s1,s2\),所有出现的\(0\)均可等概率地被其他数字替换,求\(s1\gt s2\)的概率. 思路 从高位到低位,根据每一位上相应的\( ...
- ext4向后兼容代码
ext.h: #define EXT4_GOOD_OLD_INODE_SIZE 128 ... #define EXT4_GOOD_OLD_REV 0 /* The good old (origina ...
- springBoot AOP切面编程
AOP 为 Aspect Oriented Programming 的缩写,意为 面向切面编程.AOP 为spring 中的一个重要内容,它是通过对既有程序定义一个切入点,然后在其前后切入不同的执行内 ...