php学习00

<?php
/*
 * 大写小敏感
 * 变量区分大小写,函数,关键字(if,else),echo...不区分大小写
 * 
 */
//$str = "hehh";
//ECHO $str;
/*
 * 变量作用域
 * 2种作用域
 * 1. local 局部
 * 2. global 全局
 * 在函数之外声明的变量具有全局作用域
 * 在函数之内声明的变量具有局部作用域,只能在函数内部才可以访问
 * global 关键词
 * global 用于在函数内部访问全部变量
 * php在 $GLOBAL[index]数组中保存了所有的全局变量,下标是全局变量名,在函数内部也可以使用,可以用这个数组直接更新全局变量
 * static 关键词
 * 用于在函数内部声明局部变量,此变量在函数调用完成后不会销毁,即存储在堆中,而不是栈中
 */
$x = 5;
$y = 10;

function myTest() {
    $y = 10;
    echo "变量x是:" . $x;
    echo "<br/>";
    echo "变量y是:$y";
}

//myTest();
//echo "变量x是:" . $x;
//echo "<br/>";
//echo "变量y是:$y";
//print_r($GLOBALS);
function myTest1() {
    global $x, $y;
    echo "x变量是:$x";
    echo "<br/>";
    echo "变量是:$y";
    echo "<br/>";
    $y = $x + $y;
    echo "x+y是:$x+$y";
}

//myTest1();
//echo  "<br/>";
//echo "y=$y";
function myTest2() {
    static $x = 0;
    echo $x . "<br/>";
    $x++;
}

//myTest2();
//myTest2();
//myTest2();
/*
 * echo 和 print
 * echo 能输出至少一个以上的字符串
 * print 只能输出一个字符串,返回1
 * echo 是语句,没有() ,加()也可以
 * echo 比print 稍快,因为没有返回值
 * print 也是语句 没有(),加()也可以
 * 
 * 
 * 
 */
//echo "ddddd";
//echo 'I',"am",'xue';
//print "<br/>";
//print "I";
/*
 * php数据类型
 * 1.字符串  'aaa',"aaa"
 * 2.整数,3种格式
 * 十进制
 * 十六进制 0x开头
 * 八进制 0开头
 * 3.浮点型,包含小树,或指数
 * 10.45,2.4e5 ,2.3e-3
 */
//$x = 123;
//var_dump($x);
//$y = 0x456;
//var_dump($y);
//$z = 015;
//var_dump($z);
//$a = 0.3;
//var_dump($a);
//$b = 0.3e2;
//var_dump($b);
/*
 * 数组:
 * 
 */
/*
 * NULL 表示变量值为无值
 * 
 */
/* 字符串函数
 * 1.strlen() 返回字符串的长度
 * 2.strpos() 查找子字符串或子字符
 * 返回被查找字符或字符串在原字符串中的第一个位置(以0开始)
 * 若没有找到,则返回FALSE
 */
//$str = "123";
//$len = strlen($str);
//echo $len;
//$str1 = "woshixue";
//var_dump(strpos($str1,"ee"));
/*
 * 常量:
 * 常量类似变量,一旦定义就无法撤销或更改定义,定义后为全局作用域
 * 无法在脚本中修改常量
 * define('name','value',可选(默认为false,))
 */
//define("NAME","xuexinghai",false);
//echo name;
/*
 * 循环:
 * for,foreach,while,do...while
 */
// $arr = array("apple","orange","banana");
// foreach($arr as $v)
//     echo $v."<br/>";
/*
 * 数组
 * 1.数组的声明
 * 直接声明
 * 关联
 * 2 count 获取数组元素个数
 */
//直接声明
//$arr = array();
//$arr[0] =3;
//$arr[1]="xue";
//var_dump($arr);
关联定义
//$arr1 = array("name"=>"xue",age=>25);
//var_dump($arr1);
定义二维数组
//$arr2 = array(
//    0=>$arr,
//    1=>$arr1
//);
//var_dump($arr2);
//$arr3[] = $arr1;
//$arr3['xxx'] = $arr2;
//$arr3[7] = 33;
//var_dump($arr3);
//
//$arr4 = array();
//var_dump($arr4);
//
//echo "arr4的元素为:",count($arr4);
//数组排序
//1.sort,以升序对数组排序
//
/*
 * 超全局变量,可以在任何位置使用
 * $GLOBALS 保存全部的全局变量
 * $_SERVER 保存报头,路径,和脚本位置
 * $_REQUEST 用户保存HTML表单提交的数据
 * $_POST方式提交的表单
 * $_GET 以get方式提交的表单
 * $_FILES 上传的文件信息
 * $_FILES = array(
 *       'myFile'=>array(
 *          [name] => 医刊通-投审稿-后台demo-20150912.zip
  [type] => application/zip
  [tmp_name] => C:\Windows\Temp\phpDEB7.tmp
  [error] => 0
  [size] => 507713
 *      )
 *    )
 * $_ENV环境变量
 * $_COOKIE
 * $_SESSION
 */
//session_start();
//$_SESSION['name'] = "xue";
//VAR_DUMP($_SESSION);
//print_r($_SERVER);
//if(!empty($_POST['sub']))
//print_r($_FILES['myFile']['tmp_name']);
/*
 * 日期和时间
 * date(format,timestamp);
 * format:格式化
 * timpstamp:时间戳,默认为当前时间时间戳
 * format:
 *   d:一月中的某天 01-31
 *   
 * 
 *   m:一年中的某月 01-12
 *   M: 英文简写如九月 Sep
 *   
 *   Y: 年,4位数
 *   y: 年 2位数 (不带前面的0)
 * 
 *   l: 周里的某天,用英文表示,比如星期一Monday
 *   L: 周里的某天,用序号表示,比如星期一为0,星期二为1
 *   D: 星期几的简写
 *   
 *   其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。
 *  时间格式:
 *   h:带有首位0的12小时制的时
 *   H:24小时制
 *   i:带有首位0的份 00-59
 *   s:带有首位0的秒 00-59
 *   a:小写的午前和午后
 * 
 */
/*
 * 创建日期
 * 1.通过mktime()
 *  mktime() 返回Unix的时间戳,即为从1970年1月1日00:00:00到当期的秒数
 *  mktime(hour,minute,second,month,day,year)
 * 2.strtotime()用字符串来创建日期
 *  将任何英文文本时间解析为Unix时间戳
 *   strotime(string $time [, int $now ] );
 *   $now 为指定的时间,默认为当前时间
 *   本函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间
  strtotime的第一个参数可以是我们常见的英文时间格式,比如“2008-8-20”或“10 September 2000 ”等等。也可以是以参数now为基准的时间描述,比如“+1 day”等等。
 *    


 *  */
  $time = mktime("12","20","1","9","10",date('y'));
// $time = strtotime('next month');
//  echo date("Y年m月d,H:i:sa",$time);
/*
 * include require
 * 服务器端包含 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。
 * 不同:
 *  require 如果发生错误会停止当前脚本的运行,给出 E_COMPILE_ERROR
 *  include 如果发生错误会继续执行脚本的运行,给出 E_WARNING 警告
 *  因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
 *
 */
/*
 * 文件操作
 * readfile() 读入文件的内容,向输出到输出流,返回字节数 ,读取成功在则返回字节数
 * fopen(文件名,操作方式),
 */
//readfile("indexa.php");
//$file = fopen('index.php','r');
//echo fread($file,filesize('index.php'));
/*
 * 异常处理
 * try{
 * }catch(Exception $ex){
 * } 
 * 自定义异常类
 */
//class MyException extends Exception{
//     public function errorMessage(){
//         echo "错误发生在".$this->file."中的第".$this->getLine()."行<br/>";
//         echo "错误信息为:".$this->getMessage();
//     }
//}
//function Hander(){
//    throw new Exception("没有捕获的异常");
//}
//set_error_handler('Hander');
//function checkNum($num) {
//    if ($num > 1) {
//       throw  new MyException("value must below 1");
//     }
//}
//throw new Exception('Uncaught Exception occurred');
/*
 * 过滤
 * 过滤函数
 * filter_var 通过指定一个过滤器过滤单一的变量
 * filter_var_array 通过相同或不同规定过滤器过滤多个变量
 * filter_input 获取一个输入变量并对它过滤
 * filter_input_array 获取多个变量,并通过相同或不同的过滤对他进行过滤
 * 
 */
//$i = 123;
//if(filter_var($i,FILTER_VALIDATE_INT)){
//    echo "是整数";
//}
/*
 * MySql 操作
 * 连接:mysql_connect("","","");
 * 执行:mysql_query("",$link);
 * 
 */
//$link = mysql_connect("localhost","root","root");
//if($link){
//    if(mysql_query("CREATE DATEBASE my_db",$link)){
//        echo "my_db被创建";
//    }else{
//        echo "创建失败";
//        echo mysql_error();
//    }
//}else {
//    echo '链接失败';
//}
/*
 * 面向对象
 * 1.构造方法
 *  __construct() 在php4中构造方法和类名一直,php5使用__construct,当没有__construct方法时,默认找与类名相同的方法
 * 构造函数默认为Public
 * 
 */
class Person {
//     var $name;//默认为public
//     var $age;
    var $name;
    var $age;
    public function __construct($name,$age) {
        echo "正在构造$name<br/>";
        $this->name = $name;
        $this->age = $age;
    }
    public function __set($name,$value){
        echo "正在调用__set方法</br>";
        $this->$name = $value;
    }
    public function __get($name){
        echo "正在调用__get方法<br/>";
        if(isset($this->$name)){
            return $this->$name;
        }else{
            return NULL;
        }
    }
    public function say(){
        echo $this->name."在说话他的年龄是:".$this->age."<br/>";
    }
    public function __destruct(){
        echo "再见$this->name"."<br/>";
    }
}
//$p1 = new Person("张三",20);
//$p2 = new Person("李四",23);
//$p3 = new Person("王五",25);
//$p2->name = "薛兴海";
//echo $p1->name."<br/>";
//$p2->say();

//class Student extends Person{
//      var $college;
//      public function __construct($name,$age,$college) {
//            parent::__construct($name, $age);
//            $this->college = $college;
//       }
//      public function say(){
          Person::say();
//          parent::say();
//          echo "他的学校是:".$this->college,"<br/>";
//      }
//}
//$stu = new Student("张三",23,"清华大学");
//echo $stu->say();
class MyClass {
    public $public ="Public";
    protected $protected ='Protected';
    private $private = 'Private';
    public function printHello(){
        echo $this->public,"<br/>";
        echo $this->protected,"<br/>";
        echo $this->private,"<br/>";

    }
    private function privated (){

    }
}
class Sub extends MyClass{
    public function say(){
          parent::$this->privated();        
    }

}

//$s = new Sub();
//echo $s->public;
//echo $s->say();
/*
 * final 只用来定义类和方法, 不能用来定义成员属性
 */
//使用final修饰的类不能被继承
 class A{
    public final function say(){

    }
}
//使用final修饰的方法不能被子类覆盖

//static 静态成员方法和静态成员属性
class ST {
    static  $a = 3;
    var $msg;
    const CON = 34324;
    public function __construct($msg) {
        $this->msg = $msg;
    }
    public  function say(){
        echo $this->msg;
    }
    public function __toString() {
        RETURN 'ST';
    }
    public function __clone() {
        echo "正在克隆..";
        $this->msg = "我是假的";

    }
}
//__call 当调用类的不存在的方式时,调用__call
//class Call {
//    public function __call($name,$arg){
//        echo $name,"方法不存在","参数为:",print_r($arg);
//    }
//}
//$p = new Call();
//$p->h("hah",3);
/*
 * 抽象方法
 * abstract function func();
 * 没有{},后面必须加括号
 * 只要类中有一个方法声明为抽象方法,那么此类就成为了抽象类,也必须用abatract修饰,抽象类可以包含非抽象方法,但至少有一个方法是抽象方法
 * 抽象类不能实例化,只能为子类继承,子类必须实现父类所有的抽象方法后才能被实例化,否则子类任然为抽象类
 * 
 */
abstract class Parents {
    const CONT = 3;
    public abstract function func1();
    abstract function func2();
    public function func3(){
        echo "Parent";
    }
}
class Subs extends Parents{
    function func1(){

    }
    function func2(){

    }

}
//$s = new Subs();
//$s->func3();
/*
 * 接口
 * 接口是一种特殊的抽象类,抽象类是一种特殊的类,所以,接口是一种特殊的类,如果一个抽象类的所有方法都为抽象方法,则此类就为接口
 * 接口里面不能声明变量,可以声明常量
 * 接口声明的关键字为interface ,不是class
 */
interface JK{
    const JJ =  244;
     function func1();//默认为public abstract 
     function func2();
}
class J implements JK{
    function func1(){

    }
    function func2(){

    }
}
$t = new J();
$str =serialize($t);
 unserialize($str);
class Person1
{

    //下面是人的成员属性
    var $name; //人的名子
    var $sex;  //人的性别
    var $age;  //人的年龄

    //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
    function __construct($name = "", $sex = "", $age = "") {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }

    //这个人可以说话的方法, 说出自己的属性
    function say() {
        echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age . "<br>";
    }

    //指定串行化时把返回的数组中$name和$age值串行化,忽略没在数组中的属性$sex
    function __sleep() {
        $arr = array("name", "age"); // 此时,属性$sex将被删除!!!

        return($arr);
    }

    //重新生成对象时,并重新赋值$age为40
    function __wakeup() {
        $this->age = 40;
    }
}

$p1 = new Person1("张三", "男", 20);

//把一个对象串行化,返一个字符串,调用了__sleep()方法,忽略没在数组中的属性$sex
$p1_string = serialize($p1);
echo $p1_string . "<br>"; //串行化的字符串我们通常不去解析

$p2 = unserialize($p1_string); //反串行化形成对象$p2重新赋值$age为40
$p2->say();
function __autoload($classname){
     require $classname.'.php';

}
new DM();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值