php面向对象相关技术
- step1 一个经典类的设计和实例化
<?php
class mycoach
{
public $_name='';
public $_age='';
public $_expert=array();
public function __construct($name,$age,array $expert)
{
$this->_name=$name;
$this->_age=$age;
$this->_expert=implode("、",$expert);
}
public function self_introduce()
{
echo sprintf("大家好!我是%s,职业拳手,今年%s,我会%s,快来找我训练吧%s",$this->_name,$this->_age,$this->_expert,"<br/>");
}
}
$cpc = new mycoach('陈培昌',21,array("散打","泰拳"));
$cpc->self_introduce();
$cj = new mycoach('程劲',19,array('散打','泰拳','巴西柔术'));
$cj->self_introduce();
?>
关键点一:函数传参的时候如果是个数组要声明数据类型为array :public function __construct($name,$age,array $expert)
关键点二:要获取数组里的值,要使用implode方法把数组炸开implode("、",$expert),第一个参数是指明用什么符号分割这些值
结果:
类公有变量访问方式 $this->变量名 = xxxx;
类常量的访问方式 类名::常量名,注意常量名之前不能带$,那是变量的作法
<?php
class cpcsalary
{
const basepoint = 2000;
public function workall($salesbonus,$coursebonus)
{
echo sprintf("小松鼠这个月的工资是:%f",(cpcsalary::basepoint+$salesbonus+$coursebonus));
}
} $cpc = new cpcsalary();
echo "小松鼠的基本工资是:".(cpcsalary::basepoint)."<br/>";
$cpc->workall(68.8,2500);
?>
结果
- _destruct析构方法,类实例化之后
<?php
class imcj{
public $_name;
public $_age;
const nickname="小烤肠";
public function __construct($name,$age){
$this->_name=$name;
$this->_age=$age;
} public function self_construct()
{
echo sprintf("我是%s,昵称是%s,今年%s",$this->_name,imcj::nickname,$this->_age)."<br/>";
} public function __destruct(){
echo "训练这么辛苦,还要干活,馆主又不给钱,拜拜了您呐"."<br/>";
}
}
$cj = new imcj('程劲',19);
$cj->self_construct();
?>
结果:
- 私有属性,私有方法的类外访问
<?php
class tornado
{
private $name="gaoyixuan";
protected $name2="gaoyixuan我艹你妈";
public function getname()
{
return $this->name;
} private function comments($words)
{
echo $words;
} public function addcomments($words)
{
$this->comments($words);
}
} $wenwa = new tornado();
echo sprintf("带人犯%s",$wenwa->getname())."<br/>";
$wenwa->addcomments("视频里人摸狗样儿的,其实他妈的不是个东西!!")
?>
结果是:
- 演示一下子类能否调用父类的private和protected类型变量
class subtornado extends tornado
{
public function showname()
{
echo "你说能打印出来么".$this->name2."<br/>";
} public function tellthesecret() {
echo "我觉得够呛能打印出来".$this->name."<br/>";
}
} $wenheichouwa = new subtornado();
$wenheichouwa->showname();
echo "============================";
$wenheichouwa->tellthesecret();
?>
打印结果:显然作为private类型的变量$name无法被子类调用,而protected类型的$name2则可以
- 抽象类 无法被实例化,可以被继承,是一种规定好了的类的模子
- 单一继承和多继承:注意44行那个红叉子,由于php只支持单一继承,所以多继承必须用到接口技术
某个类实现(implements)了某个接口和继承(extends)了某个类的区别? 实现接口和继承很类似,但接口不能直接创建自己的对象 继承的父类必须有该方法的具体实现,子类可以重写父类的方法,也可以不写 接口里面的方法是不需要具体实现的,只要定义了方法的名称和参数即可,具体的实现必须在实现类中定义 一句话概括: 类的方法必须有实现,接口的方法必须为空。
<?php
interface ritz{
function trainning();
function teaching();
}
interface mybf extends ritz {
function judging();
}
class mycoach implements mybf{
public $_name="";
public function __construct($name){
$this->_name = $name;
}
public function trainning()
{
printf ("%s正在训练",$this->_name);
}
public function teaching()
{
printf ("%s正在教课",$this->_name);
}
public function judging(){
printf ("%s正在裁判比赛",$this->_name);
}
}
$cpc = new mycoach('帅厉猴儿');
$cpc->trainning();
echo "<br/>";
$cpc->teaching();
echo "<br/>";
$cpc->judging();
echo "<br/>";
?>
执行结果:
- abstract 抽象类:无法被实例化,至少要包含一个抽象方法(其实没有也行嘿嘿嘿),没有方法体
//常规形式
abstract Class AbstractClass
{
abstract public function A();//这里不要携带body
abstract protected function B();//这里不要携带body
public function C(){}//这里要携带body
}
<?php
abstract class mycoach
{
public function sayhi(){}
//abstract function wenwa();
}
class tianheiwa extends mycoach
{
public $_name ="";
public function __construct($name){
$this->_name=$name;
}
public function sayhi(){
printf( "大家好,我是%s",$this->_name);
}
}
$cj = new tianheiwa("程劲");
$cj->sayhi();
?>
结果是:
- final类
final关键字,如果父类中的方法被声明为final,则子类无法覆盖该方法,如果一个类被声明为final,则不能被继承。
- 静态类
静态方法:
从程序运行开始 就实例生成内存 ,所以可以直接调用,效率会高很多,但是静态内存是有限制的,实例太多,程序直接启动不了,静态内存会常驻
非静态方法:
实例方法开始生成内存,在调用时申请零散的内存,所以效率会慢很多 ,非静态的用完就释放了
总体来讲都各有优势,什么时候用,都视情况而定
<?php
class coachsalary
{
private static $home = "三里屯酒吧一条街";
public static $_names = array();
public function __construct(array $allname){
self::$_names = implode(",",$allname);
}
public static function whichhome()
{
printf("小伙子们原来住在%s",self::$home);
echo "<br/>";
self::$home = "仿颐园搏击公寓";
printf("%s现在住在%s",static::$_names,self::$home);
echo "<br/>";
}
}
$sniffsocks = new coachsalary(array('厉智','陈培昌','程劲'));
coachsalary::whichhome();
?>
php面向对象相关技术的更多相关文章
- 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术
一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...
- 【原】http缓存与cdn相关技术
摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料,因此整个过程下来,对这方面的知识影响更加深刻.来来来,接下来总结总结 一 ...
- Storm分布式实时流计算框架相关技术总结
Storm分布式实时流计算框架相关技术总结 Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍.以此为基础,后续再深入了解S ...
- 关于全站https必要性http流量劫持、dns劫持等相关技术
关于全站https必要性http流量劫持.dns劫持等相关技术 微信已经要求微信支付,申请退款功能必须12月7号之前必须使用https证书了(其他目前为建议使用https),IOS也是2017年1月1 ...
- JavaScript对SVG进行操作的相关技术
原文地址:http://www.ibm.com/developerworks/cn/xml/x-svgscript/ 本文主要介绍在 SVG 中通过编程实现动态操作 SVG 图像的知识. SVG ...
- SAAS相关技术要点
这篇文章本来是我们开发组内部用的一个小文档.因为我们公司以前没有做SAAS的经验,就成立了一个小组做一做这方面的技术前探,我是成员之一.这篇文档想从宏观的层面把开发一个SAAS应用所要用到的技术点稍微 ...
- SSE及相关技术(web sockets, long polling等)
server-sent events--One Way Messaging 允许网页获得来自服务器的更新,并且自动更新 Server-Sent Events: allow a web page to ...
- 初识-Android之智能短信项目相关技术整理
标签页切换采用传统的TabHost: 采用TabActivty实现TabHost. 效果图-后补: 相关技术详解推荐: http://blog.csdn.net/zhouli_05/article/d ...
- http缓存与cdn相关技术
阅读目录 一 http缓存 二.Http缓存概念解析 三.cdn相关技术 摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料, ...
随机推荐
- c++ | final
C++11的关键字final有两个用途:(1).禁止虚函数被重写:(2).禁止基类被继承. 在派生类中,可以同时使用overried和final.
- Luogu P1600[NOIP2016]day1 T2天天爱跑步
号称是noip2016最恶心的题 基本上用了一天来搞明白+给sy讲明白(可能还没讲明白 具体思路是真的不想写了(快吐了 如果要看,参见洛谷P1600 天天爱跑步--题解 虽然这样不好但我真的不想写了 ...
- CodeFoeces GYM 101466A Gaby And Addition (字典树)
gym 101466A Gaby And Addition 题目分析 题意: 给出n个数,找任意两个数 “相加”,求这个结果的最大值和最小值,注意此处的加法为不进位加法. 思路: 由于给出的数最多有 ...
- RuntimeError: Model class user.models.User doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Django 2.x版本迁移数据库报这个错误,user表使用的Django的验证系统 本来就想改一下用户表的表名,莫名的报了个这个错误,在网上找到了解决办法 打开user应用模块下的apps.py文件 ...
- html/css弹性布局的几大常用属性详解
弹性布局的名称概念: 1.容器:需要添加弹性布局的父元素:项目:弹性布局容器中的每一个子元素,称为项目. 2.主轴:在弹性布局中,我们会通过属性规定水平/垂直方向(flex-direction)为主轴 ...
- python 高级函数
高级函数 map 格式:map(func, lt) 说明:接受两个参数,一个函数和一个可迭代对象,返回一个生成器,将func依次作用于lt 示例: l = [1,2,3,4,5]def double ...
- 为什么日本编程语言ruby没前途
ruby是日本的编程语言,不像日本生鱼片一样受人喜欢 日本 Ruby的性能不如.NET或Java 你又是对的!另外,Ruby比Erlang,Lua,C ++等慢,但你不使用Erlang或C ++? W ...
- 用原生js来写一个swiper滑块插件
是不是有点印象了,没错,他的最基本的用法就是左右滑动,插件使用者只需要写几行简单的html和js即可实现一个简单滑动效果,不过你完全可以组合各种元素来适应不同的场景. 当然插件我已经写好了,咱 ...
- vue项目-axios封装、easy-mock使用
vue全家桶概括下来就是 项目构建工具(vue-cli) 路由(vue-router) 状态管理(vuex) http请求工具 vue有自己的http请求工具插件vue-resource,但是vue2 ...
- 精确率与回召率与 F1-Meature
例子: true positive(真正例): 把 Colin power预测为Colin power(55) false positive(假正例): 把 其他人预测为Colin power(4+1 ...