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 案例改造 -- 给对象添 ...
随机推荐
- Linux中Source的用法
source命令:source命令的功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.用法 ...
- P4513 小白逛公园
题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着 nnn 个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白 ...
- shell 条件表达式
1.条件测试的常用语法如下 1.test 测试表达式 2.[ 测试表达式 ] #两边需要有空格 3.[[ 测试表达式 ]] 4.(( 测试表达式 )) 说明: 第一种和第二种是等价的,第三种是扩展的t ...
- UOJ Goodbye Bingshen
在叶子童鞋的推荐下打了这场比赛... 感觉被虐爆了... 怎么这么多构造题... 我还没写过呢... 交互题是毛线...看了好久没看懂...就放弃了...(我语文好差QAQ...) 最后只会T1... ...
- js,add script async? loaded ok.
function loadScript(url, callback){ var script = document.createElement_x("script") script ...
- sokect数据压缩实现
上一篇文章说到了用Java Socket来传输对象,但是在有些情况下比如网络环境不好或者对象比较大的情况下需要把数据对象进行压缩然后在传输,此时就需要压缩这些对象流,此时就 可以GZIPInputSt ...
- 【C/C++】知识点
1.C++中的参数传递机制:值传递.指针传递.引用传递 2.C++的内部类和外部类: 一个讲得不错的博客,不过不让转载:C++内部类 3.static 可以修饰局部变量.全局变量和函数. 不可修饰类! ...
- .NET 下二维码解决方案
使用Zint和Zxing实现二维码的编码与解码(Using open-source tools to generate and decode Q-R code) 1.Zint生成二维码 http:// ...
- 洛谷——1968 美元汇率(DP)
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- 洛谷2085最小函数值(minval) + 洛谷1631序列合并
题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...