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命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.用法 ...
- POJ 1364:King(差分约束)
题目大意:判断是否存在一个长度为n的序列满足给出的不等关系. 分析: 将序列和转化成用两个前缀和之差来表示即可变为差分约束系统. 需要注意的是不能忘记n要加+1,因为还有一个特殊源点,自己因为n:=n ...
- Sum of Squares of the Occurrence Counts解题报告(后缀自动机+LinkCutTree+线段树思想)
题目描述 给定字符串\(S(|S|\le10^5)\),对其每个前缀求出如下的统计量: 对该字符串中的所有子串,统计其出现的次数,求其平方和. Sample Input: aaa Sample Out ...
- cf 853 D Michael and Charging Stations [dp]
题面: 传送门 思路: 看到题目,第一思路是贪心,但是我很快就否决掉了(其实分类贪心也可以做) 然后就想,贪心不能解决的状态缺失,是否可以用dp来解决呢? 事实证明是可以的 我们设dp[i][j]表示 ...
- 满汉全席(banquet)
满汉全席(banquet) 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做 ...
- inner join和left join 、right join 的区别?
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- 'NoneType' object has no attribute '__getitem__'
报错 'NoneType' object has no attribute '__getitem__' 你 result 返回的是 None ,所以 result [0] 取不了值
- 封装一个类似jquery的ajax方法
//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataT ...
- GC+JVM
1.内存管理模型 ①以对象的方式管理内存,每个对象占据内存中连续的一段,分配在堆中.对象引用可以指向堆中的其他对象.非基本数据类型的对象等价于数据引用. ②基于栈和堆的内存管理都是动态分配,即在运行时 ...
- [LeetCode] Count and Say 字符串
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...