• 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方面很菜,所以看法也就有很多不对的地方。希望大家不要拍砖呀。感激。
  • 相关阅读:
    leetcode 347. Top K Frequent Elements
    581. Shortest Unsorted Continuous Subarray
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 217. Contains Duplicate、219. Contains Duplicate II、220. Contains Duplicate、287. Find the Duplicate Number 、442. Find All Duplicates in an Array 、448. Find All Numbers Disappeared in an Array
    leetcode 461. Hamming Distance
    leetcode 19. Remove Nth Node From End of List
    leetcode 100. Same Tree、101. Symmetric Tree
    leetcode 171. Excel Sheet Column Number
    leetcode 242. Valid Anagram
    leetcode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/huangjacky/p/2315189.html
Copyright © 2020-2023  润新知