设为首页 收藏本站
查看: 662|回复: 0

[经验分享] php 面向对象基础

[复制链接]

尚未签到

发表于 2017-3-26 06:16:12 | 显示全部楼层 |阅读模式
  传统开发方法存在的问题:
      1). 软件重用性差; 2). 软件可维护性差; 3). 无很好的扩展性
  面向对象的三大特点:封装,继承,多态
  1. 面向对象入门
  类、属性、方法、构造函数、析构函数

<?php
class MyPc{
public $name="默认";
var $price;
function MyPc($name=""){//如果不赋默认值,调用该方法时如果不传参数,会提示警告
$this->name=$name;
}
//function __construct(){}//构造函数
function vod() {
return $this->name." 电脑";
}
function __destruct(){//析构函数
echo $this->name."<br>";//后进先出的原则
}
function  test(){
return "磨灭了<br>";
}
}
echo MyPc::test();//类名直接访问方法,方法中不能有实例变量的引用
$pc1 = new MyPc("我的");
$pc2 = new MyPc("你的");
echo $pc1->vod()."<br>";
$pc1=null;//手动回收,自动调用__destruct()方法
echo $pc2->vod()."<br>";
$pc2=null;//手动回收,自动调用__destruct()方法
?>
  2. 类的封装
  
    封装是把一些相关的属性和行为隐藏起来,从而得到保护和安全
  封装关键字
        public 表示全局,类内部外部子类都可以访问;
        protected表示受保护的,只有本类或子类或父类中可以访问;
        private表示私有的,只有本类内部可以使用;

<?php
//类的封装和应用
class MyPc{
private $name;
private $age;
function __construct($name=""){
return $this->name=$name;
}
function __get($name){
return $this->name;
}
function __set($n,$v){
if($v>100){
$this->$n=$v;
}
}
private function power(){
return $this->name." 打开电源";
}
function ok(){
return $this->power().",开机成功";
}
}
$pc1=new MyPc("电脑");
$pc1->name=1000;//如果没有__set()方法,会报错
$pc1->age=200;
echo $pc1->name;//如果没有__get()方法,会报错
echo $pc1->age;
//__get()和__set()方法
/*
问题: __get方法和__set方法在类中只能定义一次,如果有多个私有属性,如何指定对应的get和set方法
__get和__set方法只是用来得到和设置属性的值,如果有多个,就在方法体里一一设置就行了
*/
?>
  3. 类继承、抽象、接口、多态

<?php
//PHP中使用extends进行单一继承
class Root{
function root1(){
return "Root print<br>";
}
}
class Son extends Root{
function root1(){//覆盖父类的方法,如果想访问父类的方法,可用  类名::方法名()来访问
return "Root:".Root::root1()."in son's root";
}
function son1(){//此时可用$this变量来访问父类的方法
return $this->root1()."Son print<br>";
}
}
$p=new Son();
echo $p->son1();
echo $p->root1();
//抽象类
//php抽象类里必须有抽象方法,继承抽象类时必须实现所以的抽象方法
//java的抽象类里可以没有抽象方法
abstract class A{
abstract function fun1();
abstract function fun2();
function ok(){
}
}
class B extends A{
function fun1(){
echo "func1";
}
function fun2(){
echo "func2";
}
}
//接口
/*
* 所需的关键字interface  implements
* 用法和java同
* 如果同时要继承和实现接口,先继承后接口,单继承多接口
* */

//多态
/*运算符 :instanceof
*
* */
class C{}
class D{}
$a=new C;//new C的时候居然可以不需要()
//echo $a;
if($a instanceof C){
echo '<br>C';
}
?>
  4. 一些方法
  __tostring()、__call()、__clone()、__autoload()

<?php
//__tostring()方法,类似java的toString 方法
//对象方法异常处理__call($funname,$arr_value)
/*
* 如果调用的方法不存在,会自动调用__call方法
* __call方法主要用来调试和吸收错误
* */
//克隆对象的应用
/*
* 方法名 __clone()  
* 关键字  clone
*/
//自动载入对象的方法
/*
* 方法名 __autoload()
* 该方法是在类以外单独的方法
* */
class my{
public $name="我的类";
function __toString(){
return $this->name."tostring <br>";
}
function __call($methodname,$value){
echo "不存在的方法为:".$methodname."<br>";
echo "错误代码为:".print_r($value)."<br>";//参数值是以数组的形式传递,故用print_r打印
}
function __destruct(){
echo "清理一个对象<br>";
}
function __clone(){//使用clone关键字克隆时会自动调用该方法
$this->name="克隆的值";
}
}
$p=new my();
echo $p;
$p->demo("test");//demo方法并不存在,会调用__call方法,如果没有__call方法会报错
$b=clone $p;//克隆一个对象,执行完后,__destruct()会执行两次
echo $b->name."<br>";
function __autoload($class_name){
include($class_name.".php");
}
$al=new autoload();
$al->autoloadtest();
?>
  5. 常用的关键字

<?php
//类中的常用关键字
/*
* final
*
* 用来定义类和方法的一个重要关键字,
* 当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载
*
* self
*
* 用来用类访问当前类中的内容的关键字,
* 类似与$this关键字,但$this是需要类实例化以后才可以使用,self 可以直接访问当前类中的内部成员
*
* 因为没有实例化类访问内部属性或者方法是没有意义的,所以self一般用来访问类中的:静态成员,常量,或者其他定义内容
* self :: 类内部成员(属性或者方法) <==>类名 :: 类内部成员(属性或者方法)
* 问题:self和this的区别
*
* static
* 用来定义类的静态属性或方法,可以在类未被实例化时使用
* 静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
*
* 静态方法内部禁止出现非静态内容(不能使用this关键字)
*
* 静态成员的访问:
* 类名称 : : 静态成员     
* self  : : 静态成员
*
* const
*
* 用来定义类中的常量,类似PHP外部定义常量的关键字define();  
* Const只能修饰类当中的成员属性!
* 1、建议大写常量
* 2、常量不使用$符号
* 常量的访问:
* 类名称 : : 常量     
* self  : : 常量
* */
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-355362-1-1.html 上篇帖子: php tips小集 下篇帖子: php模板技术 实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表