资讯专栏INFORMATION COLUMN

php语言特性学习(二)

wemall / 2687人阅读

摘要:变量的管理用来判断某个变量是否已经被声明,返回一个布尔值,如果变量被定义,返回否则返回当变量被定义成也返回。同样可以检查某个数组中元素是否被设置。这就保证方法的扩展性。加一个子类继承父类即可。

1.变量的管理

1.isset用来判断某个变量是否已经被php声明,返回一个布尔值,如果变量被定义,返回true 否则返回false 当变量被定义成null也返回false。同样可以检查某个数组中元素是否被设置。可以接受任意数量参数
isset($val1,$val2 ...) 但是只有全部被设置了才返回true
2.unset 取消定义之前的变量 如果没有其他变量引用的话会释放这个变量的内存空间。用inset检测unset的值返回false
3.empty 检测一个变量是否被声明或者是否为false
超全局变量
$_GET:一个包含所有php从客户浏览器收到的get变量
$_POST:一个包含所有php从客户浏览器收到的post变量
$_COOKIE:一个包含所有php从客户浏览器收的cookie的数组
$_ENV:一个包含环境变量的数组
$_SERVER:一个存放web环境变量的数组

2.转义

双引号变量回解析,单引号不会解析。双引号里面可以有转义,单引号不行

3.多态

class Cat {
    function miau() {
        print("miau");
    }
}
class Dog {
    function wuff() {
        print("wuff");

    }
}

function printResult($obj) {
    if($obj instanceof Cat) {
        $obj->miau();
    } else if($obj instanceof Dog) {
        $obj->wuff();
    }else {
        print("error:wrong object");
    }
}

echo printResult(new Dog());
echo "
"; echo printResult(new Cat()); //下面是结果 wuff miau

可以看出本例子不可以扩展,如果再加一个动物则必须改源码 所以用下面方法替换
建立一个父类,建立cry方法。再分别建立两个子类cat dog类并且也建立cry方法(对父类方法重写),再用一个实例函数判断对象,分流。这就保证方法的扩展性。加一个子类继承父类即可。而不必改源码

//定义一个父类
class Father {
    function cry($arg) {
        print($arg);
    }
}
class Cat extends Father{
    function cry() {
        print("Cat");
    }
}
class Dog extends Father{
    function cry() {
        print("Dog");

    }
}
function printResult($obj) {
    if($obj instanceof Cat) {
        $obj->cry();
    } else if($obj instanceof Dog) {
        $obj->cry();
    }else {
        print("error:wrong object");
    }
}

echo printResult(new Dog());
echo "
"; echo printResult(new Cat());

4.父类,子类中的parent:: self::

self:: 调用当前类的方法,属性
parent::调用父类的方法和属性

//父类
class Father {
    const name = "father";
    public function __construct() {
        print(self::name);
    }
}
//子类
class child extends Father {
    const name = "child";
    public function __construct() {
        parent::__construct();
        echo "
"; print(self::name); } } $child = new child();

5.instanceof 操作符 判断类的逻辑二元运算符

class Father {
    public $name = __CLASS__;
}

class Child extends Father {
    public $name = __CLASS__;
}

class test {
    public $name = __CLASS__;
}

 function judge($obj) {
    if(!($obj instanceof Father)) {
        print($obj->name);
        print(" is a father");
    }
 }

judge(new Child());
judge(new test());

6.toString方法(里面是return的值)

class Person {
    private $name;
    function __construct($name) {
        $this->name = $name ;
    }

    function __toString() {
        return $this->name;//一定要return值 调用类的时候后返回
    }
}

$obj = new Person("mmy family");
print($obj);

7.try catch exception 必须继承exception 类

class NullHandleException extends Exception {
    function __construct($message) {
        parent::__construct($message);
    }
}

function printObj($obj) {
    if($obj == null) {
        throw new NullHandleException("print Object received null object");
    }
    print($obj."
"); } class MyName { private $name; function __construct($name) { $this->name = $name; } function __toString() { return $this->name; } } try { printObj(new MyName("boss")); printObj(NULL); printObj(new MyName("jone")); } catch(NullHandleException $e) { print $e->getMessage()."
"; print "in file " . $e->getFile()."
"; print "on line " . $e->getLine(); } //结果是 boss print Object received null object in file /mnt/hgfs/www/test/class.php on line 269

8.__autoload 自动载入

MyClass.php
class MyClass {
    function hello() {
        print "hello my friend ";
    }
}
general.inc
    function __autoload($class_name) {
       // echo$_SERVER["DOCUMENT_ROOT"]."/classes/".$class_name.".php";
    require_once($_SERVER["DOCUMENT_ROOT"]."/classes/".$class_name.".php");
    }
 
main.php

require_once("general.inc");
$class = new MyClass();
echo "hello";exit;
$class->hello();
//__autoload 主动调用class自动加载(载入)

**

给程序员一个鼓励呗!

**

微信

支付宝

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23158.html

相关文章

  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    caspar 评论0 收藏0
  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    nihao 评论0 收藏0
  • SegmentFault 技术周刊 Vol.40 - 2018,来学习一门新的编程语言吧!

    摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...

    Drummor 评论0 收藏0
  • PHP程序员学习路线

    摘要:第一阶段基础阶段基础程序员重点把搞熟练核心是安装配置基本操作目标能够完成基本的系统安装,简单配置维护能够做基本的简单系统的开发能够在中型系统中支持某个功能模块的开发。本项不做重点学习,除非对前端有兴趣。 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系统的PHP开发;能够在P...

    genedna 评论0 收藏0
  • php学习笔记()面向对象编程

    摘要:具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。类的定义以关键字开始,类的命名通常以每个单词第一个字母大写定义属性构造函数,在对象被实例化的时候自动调用是里面的伪变量,表示对象自身。 public 公有的:本类,子类,外部对象都可以调用 protected 受保护的:本类 子类,可以执行,外部对象不可以调用 private 私有的:只能...

    alanoddsoff 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<