zoukankan      html  css  js  c++  java
  • PHP 简单学习过程1

    最近需要使用PHP,所以我也只能把书拿出来看看,书是图灵的《PHP实战》,人民邮电出版的。

    PHP中如何使用类

       1: <?php
       2:     class Document{
       3:         protected $title;
       4:         private $text;
       5:         function __construct($title, $text) {
       6:             $this->title = $title;
       7:             $this->text = $text;
       8:         }
       9:     }
      10:     class NewArticle extends Document{
      11:         public $introduction;
      12:         function __construct($title, $text, $introduction) {
      13:             parent::__construct($title, $text);
      14:             $this->introduction = $introduction;
      15:         }
      16:     }
      17: ?>
    从上面的代码,我们可以看出来:
    • PHP代码是动态的,无类型
    • 代码嵌入到<?php ?>标签中,或者简化的<? ?>标签中
    • 变量必须以$开头,如$this
    • PHP中默认可见性都是public,因为是动态语言,为了动态都可见了,哈哈
    • 其他的都和C++类似。

    异常的处理

    请看下面的代码:

       1: if(!array_key_exists('DBNAME', $_ENV))
       2:             die('环境变量中没有DBNAME');
       3:     
       4:     if(!array_key_exists('DBNAME', $_ENV))
       5:             throw new Exception('环境变量中没有DBNAME');

    上面两段代码的区别:
    1. 如果没有DBNAME,在输出窗口输出“环境变量中没有DBNAME”,然后程序退出
    2. 如果调用程序没有用try处理,那么效果同上,如果调用程序用了try处理,那么程序会继续运行,并在堆栈中记录下相关信息,我们可以调用debug_backtrace()和debug_print_backtrace()来输出和处理堆栈中的信息
    3. 当die()或者throw代码行被触发后,它们后面的所有代码都不会再被执行。

    自定义异常和捕获异常


    代码如下:
       1: class ErrorFromPHPException extends Exception{
       2:         function PHPErrorHandler($errno, $errstr, $errfile, $errline){
       3:             throw new ErrorFromPHPException($errstr, $errno);
       4:         }
       5:         
       6:         function ChangeErrorHandler(){//替换系统自己的错误处理函数,类似API HOOK技术
       7:             $oldhandler = set_error_handler('PHPErrorHandler');//用我们自己的函数来替换原来的函数
       8:             //如果现在需要替换回来的话
       9:             set_error_handler($oldhandler);
      10:         }
      11:     }
      12:     try{
      13:     //执行一些操作,可能会产生异常
      14:     }  catch (ErrorFromPHPException $e){//如果异常是我们定义的异常,那么执行对应的异常处理操作
      15:         //操作1
      16:     }  catch (Exception $e){ //由于任何异常都继承自Exception,所以这里就能截获所有的异常
      17:         //操作2
      18:     }
    上面的代码能看出来:
    1. 我们自己的异常类继承Exception后,就能当成异常来使用了,能够throw了
    2. PHP自身产生的错误总是按照PHP4的方式来报告,而不是报告异常,所以我们可以用自己函数来替换PHP的异常处理函数,不过替换后,记得要换回来,免得影响其他模块的正常工作。
    3. 在try..catch..处理中,catch的顺序一定要对,如果catch(Exception $e)放在其他catch语句前面,那么其他catch语句都不会被执行了,切记

    方法的重写(override):子类的方法和父类完全一样,而且子类重新实现了此方法,那么这个子类就重写了这个方法.
    方法的重载(overload):如果一个类中多个方法的名字一样,但是参数不一样(个数或者类型),那么这几个方法就是相互重载.

    看看魔法函数__get()和__set()


    代码如下:

       1: class Properties{
       2:     private $text;
       3:     
       4:     private function __get($name) {
       5:         $method = 'get'.$name;
       6:         return $this->$method();
       7:     }
       8:     
       9:     private function __set($name, $value) {
      10:         $method = 'set'.$name;
      11:         return $this->$method($value);
      12:     }
      13:     
      14:     public function getText() {
      15:         return $this->text;
      16:     }
      17:  
      18:     public function setText($text) {
      19:         $this->text = $text;
      20:     }
      21: }

    我们重写Magic函数__get和__set,那么在访问$text时候,函数调用顺序:先调用__get(‘Text’)再调用getText()。因此我们可以重写__get和__set方法来拦截对变量的访问。如何?哈哈。

    final修饰类,防止类被继承;修饰方法,防止方法被子类重写。常量用const来定义。


    静态方法(类方法),静态变量都和C++一样。


    类常量用const DBName = ‘HuangJacky’;就可以了不需要static修饰,常量一般不用$开头.


    使用类变量而非常量.
    使用方法而非常量.

    抽象类和抽象方法,使用abstract修饰,声明和使用都和C++一样。

    类型提示,虽然php的参数可以不用声明其类型,但是我们可以显示定义其类型,那么程序在调用的时候参数的类型就必须匹配。


    以上都是我自己的看法,当然因为我PHP方面很菜,所以看法也就有很多不对的地方。希望大家不要拍砖呀。感激。
  • 相关阅读:
    常用排序算法--合并排序和快速排序
    常用排序算法--冒泡排序及改进和插入排序时间复杂度分析
    常用数据结构图--拓扑排序
    常用数据结构栈的应用—-表达式求值
    Session原理,生命周期
    jsp内置对象out 和response.getwriter().write()的区别
    div中的div在父容器中水平居中或者垂直居中
    <!DOCTYPE html> 到底是什么意思?
    设置了环境变量,为什么执行javac报找不到javac: 找不到文件
    自动抽取邮件内容
  • 原文地址:https://www.cnblogs.com/huangjacky/p/2315189.html
Copyright © 2011-2022 走看看