美团昨天面试题:给你一个webshell,如何渗透内网,给出详细思路

渗透测试p1rate 回复了问题 • 9 人关注 • 4 个回复 • 1669 次浏览 • 2016-09-10 16:00 • 来自相关话题

PHP课堂知识点总结--part4

编程pygain 发表了文章 • 3 个评论 • 376 次浏览 • 2016-09-10 08:52 • 来自相关话题

   今天小编带来的是面向对象类编程的灵魂   类和对象

我们所说的类就是对事物的一个概括描述,比如人类,学生,老师,杯子等,我们不能只通过这样简单的概括去找到那个人活着物品。

在类中最重要的自然是属性和方法,当然还有接口放在继承那段去讲解

定义一个类:class{      属性,方法和接口                  }





属性:类的静态特性,比如姓名,年龄;

在PHP使用这样的方法在类中定义属性:var $name;     var $age;(在封装后不用var了)





方法:类的动态特性,比如能说话,能走路;

这样定义方法 :function say(){}; function walk(){}




对象:对类的实例化,比如 那个穿蓝衣服和白裤子170cm 名字叫TOM的站在楼下的孩子,这样我们可以一下子找到那个人或者物品。


我们这样实例化对象:

先创建一个新类

class Person{
        
    //属性
    var $name;
    var $age;
    var $sex;
    //方法
    function walk(){
        echo "走起";
    }
    function eat(){
        echo "吃饭";
        
    }
    function say(){
        echo "你好";
    }
}   
接下来实例化一个对象:


   $P1=new Person();
  


    $P1->name='张三';//给类内的属性赋值
    echo $P1->name;// ->调用类内的属性
    $P1->age=18;
    echo $P1->age;
    $P1->sex='man';
    echo $P1->sex;

    $P1->walk();
    $P1->eat();//调用方法
    $P1->say();//调用方法
 


提到类和对象不得不提及三大特性,封装、继承、多态

1.

首先先来说封装性:上文所创建的类内的属性和方法在类外均可以直接调用并随意改变值,这对于网站的建设来说是非常不安全的,使得人人都可以修改已经规定的类内的值。

所以我们使用PHP的封装性来解决这些问题。

我们先对属性定义:private $name;这样再使用上文的方法发现不能够正常访问属性,怎么办呢,我们有两种方法解决

第一种:

类内定义方法:    function setName($name){   $this->name=$name    }和 function getName($name) {return $this->name}


同时在类外调用者两个方法:

$C1=new Person();


$C1->setName('Tom');
echo $C1->getName();




第二种:

首先讲下针对一次赋值多个参数的方法: function __construct($name,$age,$sex)     {$this->name=$name,$this->age=$age,$this->sex=$sex}

在类外调用

$C1=new Person(‘TOM’,'20','MAN');


echo $B->name;


echo $B->age;

echo $B->name;

发现报错。。。。 原因是并没有写出口方法

接下来我们在类内定义方法:

function __set($propertyName,$propertyValue){

 $this->$propertyName=$propertyValue;//对属性再次赋值的时候可使用

        }
function __get($propertyName){
 return $this->$propertyName;

这样这个类就变成了可读可写的了,通过这两个函数的组合可以做出权限不同的类。




关于类中的常量可以这样定义:const PI=3.14;

想在不同的对象中调用一个相同的属性可以这样定义:


static $color='yellow';//对象公用的量,必须有初值
        
        function same(){
            return self::$color;
        }


之后在类外调用这个same()方法即可;



2.上述那个属性直接吧我们引入到了继承性的讨论当中

何为继承:我们把人类作为最大最模糊的类,那么医生,教师,警察,渗透测试工程师,就是比人类划分更仔细的子类,子类含有父类的所有属性和方法(父类当然也可以不允许子类继承自己的属性和方法),同时也有着自己特有的属性和方法。

实现一个子类的继承:

class Person{
    protected $name;
    protected $age;
    protected $sex;
    function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
     function say(){
        echo "speaking";
    }
     function eat(){
        echo $this->name."eating";
    
     }
}   
class Student extends Person{

protected  school


function study(){
        echo "studying";
}


//对象实例化

$s=new Student();

echo $s->name;

echo $s->age;

echo $s ->sex;

echo $s->school="清华大学";

$s->say();

$s->eat();

$s->study();


关于继承不得不提属性和方法的定义方法:

private  $name/function(){} :私有的,此方法和属性只能够在本类使用,不允许子类继承它。
protected   $name/function{}:受保护的,本类和子类均可以使用  在实际开发过程中较多使用。
public   $name/function{}:共公有的 :本类,子类,孙类,类外均可以使用(使用大忌)。




在弄清楚上述三种定义方法的正确使用后,我们讨论一下方法的重写问题

当我们在父类中允许自己的方法继承后,在子类中可以重新定义名字相同的方法,使其在类外调用后实现不同的功能。

在这个过程要小心,如果类被定义成这样class final Person{},强制子类不能继承这个父类;同理在父类的方法前加 final也不能使子类继承和重写这个方法。




接下来说一下抽象和接口的问题

抽象类:

当我们这样定义一个类时候它就成为了抽象类:这样的类不能被实例化,只能被继承,当中只能写方法不能写任何属性。

abstract class Person{
    function eat(){
        echo "eat";
    }

抽象方法:

我们在父类中这样定义一个方法:abstract function say();   同时这个方法必须在子类中重写,所以在父类中可以不写方法的内容。




接口:

接口不能在里边写具体的方法和实例化,只能拿来继承


interface inf{

    protected $name; //不能包含属性
    function say();
    function eat();


}

我们这样继承接口:

class Person implements inf,inf1,inf2    {     //类实现多个接口,但是不提供多继承
   
    function say(){
        echo "say good bye";//继承
    }
    function eat(){
        echo "eat apple";
    }


之后在类外直接调用即可。关于继承先说到这里




3.

子类继承父类的属性和方法体现了PHP继承性,而不同对象的不同方法和属性体现了其多态性。

我们先定义一个父类:


class Person{
    function say(){
        echo "person";
    }
}    
class Student extends Person{
    function stu(){
        echo "stu";
    }
}    
class Teacher extends Person{
    function tea(){
        echo "tea";
    }
}

$p1=new Person();
$s1=new Student();
$t1=new Teacher();

下面判断对象是否是类的实例


if ($p1 instanceof Person){
    echo "YES";
}else {
    echo "NO";
}

最后我们把父类指针指向地址:

function fun(Person $obj){
    $obj->stu();//父累指针指向子类地址,多用于参数。
}


fun($p1); 这样可以由父类的属性调用子类的方法:




未完待续......... 查看全部
   今天小编带来的是面向对象类编程的灵魂   类和对象

我们所说的类就是对事物的一个概括描述,比如人类,学生,老师,杯子等,我们不能只通过这样简单的概括去找到那个人活着物品。

在类中最重要的自然是属性和方法,当然还有接口放在继承那段去讲解

定义一个类:class{      属性,方法和接口                  }





属性:类的静态特性,比如姓名,年龄;

在PHP使用这样的方法在类中定义属性:var $name;     var $age;(在封装后不用var了)





方法:类的动态特性,比如能说话,能走路;

这样定义方法 :function say(){}; function walk(){}




对象:对类的实例化,比如 那个穿蓝衣服和白裤子170cm 名字叫TOM的站在楼下的孩子,这样我们可以一下子找到那个人或者物品。


我们这样实例化对象:

先创建一个新类

class Person{
        
    //属性
    var $name;
    var $age;
    var $sex;
    //方法
    function walk(){
        echo "走起";
    }
    function eat(){
        echo "吃饭";
        
    }
    function say(){
        echo "你好";
    }
}   
接下来实例化一个对象:


   $P1=new Person();
  


    $P1->name='张三';//给类内的属性赋值
    echo $P1->name;// ->调用类内的属性
    $P1->age=18;
    echo $P1->age;
    $P1->sex='man';
    echo $P1->sex;

    $P1->walk();
    $P1->eat();//调用方法
    $P1->say();//调用方法
 


提到类和对象不得不提及三大特性,封装、继承、多态

1.

首先先来说封装性:上文所创建的类内的属性和方法在类外均可以直接调用并随意改变值,这对于网站的建设来说是非常不安全的,使得人人都可以修改已经规定的类内的值。

所以我们使用PHP的封装性来解决这些问题。

我们先对属性定义:private $name;这样再使用上文的方法发现不能够正常访问属性,怎么办呢,我们有两种方法解决

第一种:

类内定义方法:    function setName($name){   $this->name=$name    }和 function getName($name) {return $this->name}


同时在类外调用者两个方法:

$C1=new Person();


$C1->setName('Tom');
echo $C1->getName();




第二种:

首先讲下针对一次赋值多个参数的方法: function __construct($name,$age,$sex)     {$this->name=$name,$this->age=$age,$this->sex=$sex}

在类外调用

$C1=new Person(‘TOM’,'20','MAN');


echo $B->name;


echo $B->age;

echo $B->name;

发现报错。。。。 原因是并没有写出口方法

接下来我们在类内定义方法:

function __set($propertyName,$propertyValue){

 $this->$propertyName=$propertyValue;//对属性再次赋值的时候可使用

        }
function __get($propertyName){
 return $this->$propertyName;

这样这个类就变成了可读可写的了,通过这两个函数的组合可以做出权限不同的类。




关于类中的常量可以这样定义:const PI=3.14;

想在不同的对象中调用一个相同的属性可以这样定义:


static $color='yellow';//对象公用的量,必须有初值
        
        function same(){
            return self::$color;
        }


之后在类外调用这个same()方法即可;



2.上述那个属性直接吧我们引入到了继承性的讨论当中

何为继承:我们把人类作为最大最模糊的类,那么医生,教师,警察,渗透测试工程师,就是比人类划分更仔细的子类,子类含有父类的所有属性和方法(父类当然也可以不允许子类继承自己的属性和方法),同时也有着自己特有的属性和方法。

实现一个子类的继承:

class Person{
    protected $name;
    protected $age;
    protected $sex;
    function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
     function say(){
        echo "speaking";
    }
     function eat(){
        echo $this->name."eating";
    
     }
}   
class Student extends Person{

protected  school


function study(){
        echo "studying";
}


//对象实例化

$s=new Student();

echo $s->name;

echo $s->age;

echo $s ->sex;

echo $s->school="清华大学";

$s->say();

$s->eat();

$s->study();


关于继承不得不提属性和方法的定义方法:

private  $name/function(){} :私有的,此方法和属性只能够在本类使用,不允许子类继承它。
protected   $name/function{}:受保护的,本类和子类均可以使用  在实际开发过程中较多使用。
public   $name/function{}:共公有的 :本类,子类,孙类,类外均可以使用(使用大忌)。




在弄清楚上述三种定义方法的正确使用后,我们讨论一下方法的重写问题

当我们在父类中允许自己的方法继承后,在子类中可以重新定义名字相同的方法,使其在类外调用后实现不同的功能。

在这个过程要小心,如果类被定义成这样class final Person{},强制子类不能继承这个父类;同理在父类的方法前加 final也不能使子类继承和重写这个方法。




接下来说一下抽象和接口的问题

抽象类:

当我们这样定义一个类时候它就成为了抽象类:这样的类不能被实例化,只能被继承,当中只能写方法不能写任何属性。

abstract class Person{
    function eat(){
        echo "eat";
    }

抽象方法:

我们在父类中这样定义一个方法:abstract function say();   同时这个方法必须在子类中重写,所以在父类中可以不写方法的内容。




接口:

接口不能在里边写具体的方法和实例化,只能拿来继承


interface inf{

    protected $name; //不能包含属性
    function say();
    function eat();


}

我们这样继承接口:

class Person implements inf,inf1,inf2    {     //类实现多个接口,但是不提供多继承
   
    function say(){
        echo "say good bye";//继承
    }
    function eat(){
        echo "eat apple";
    }


之后在类外直接调用即可。关于继承先说到这里




3.

子类继承父类的属性和方法体现了PHP继承性,而不同对象的不同方法和属性体现了其多态性。

我们先定义一个父类:


class Person{
    function say(){
        echo "person";
    }
}    
class Student extends Person{
    function stu(){
        echo "stu";
    }
}    
class Teacher extends Person{
    function tea(){
        echo "tea";
    }
}

$p1=new Person();
$s1=new Student();
$t1=new Teacher();

下面判断对象是否是类的实例


if ($p1 instanceof Person){
    echo "YES";
}else {
    echo "NO";
}

最后我们把父类指针指向地址:

function fun(Person $obj){
    $obj->stu();//父累指针指向子类地址,多用于参数。
}


fun($p1); 这样可以由父类的属性调用子类的方法:




未完待续.........

PHP基础一

编程复活甲 发表了文章 • 2 个评论 • 333 次浏览 • 2016-09-09 22:29 • 来自相关话题

php基础

php简介

php定义:

1.服务器端的语言

开发web应用这种b/s结构的软件,不仅需要编写客户端的语言,还要编写服务器短业务流程的语言组成。php就是服务器端运行的语言,只会在服务器端运行。

2.嵌入到HTML中的语言

在HTML代码中可以通过一些特殊的表示符号将各种语言嵌入(例如JavaScript)。在HTML中嵌入PHP需要在服务器中先运行完成,如果执行后有输出,则输出的结果字符串会嵌入到原来php代码处,在HTML代码一起响应给客户端浏览器器解析。

3.脚本语言

脚本语言,又称为动态语言。脚本通常以文本保存。只在被调用时进行解释编译。PHP就是文本保存格式保存在服务器端的,在请求时才由web服务器中安装的php应用模块解析,并从上到下一步一步的执行程序。

PHP都能做什么:

1.收集表单数据

2.省城动态网页

3.字符串处理

4.动态输出图像

5.处理服务器端文件系统

6.编写数据库支持的网页。

7.回话跟踪控制。

8.处理xml文件。

9.支持利用大量的网络协议

10.服务器端的其他操作。

 

环境搭建  xampp   (下载xampp 启动apach  注:如启动不了可能因为80端口被占用,这是将apach配置文件中所有80改为82或 其他,如若还是无法启动检查任务管    理器是否开启VMware,将vmvare全关闭即可)

 

基本语法

。php语言标记    

<?php?>

<script lanllguage="php"></script>

<?.........?>

<%.......%>

指令分隔符

每一条语句后面使用“:”结束。

。注释

//  单行注释

/多行注释/多行文档注释  可以方便phpdocument生成文档。

。变量和变量类型

存在8种变量类型,可以分为三类 标量类型: boolean、integer、float(double)、 string 复合类型: array、object* 特殊类型: resource、NULL

PHP中最基本的数据存储单元就是变量和常量,可以存储不同类型的数据。php是弱类型语言,变量类型有程序的上下文决定。

变量的定义:$变量名=初值;

三个常用的函数:

empty():判断一个变量是否为空。

isset():检测一个变量是否设置。

unset():释放指定变量。

变量命名

以数字字母下划线组成

不能以数字开头

区分大小写

不能使用关键字

引用赋值

$a = 10;

$b = &$a;

$a = 20;  //这时候b也是20;相当于快捷方式。

数据类型

标量:布尔型 整形 浮点型 字符串

复合类型:数组 对象

特殊类型:resource NULL

var_dump():该函数可以查看某个表达式的值和类型。

布尔类型:(true false)

以下值被认为是false,其他的值被认为true

布尔值false

整型值0

浮点值0.0

空白字符串和字符串“0”

没有成员变量的数组

没有单元的对象(仅适用php4)

特使类型NULL

整形:

可以使用十进制,八进制(数字前面加0),十六进制(数字前面加0x)

php不支持无符号整数

整形最大值跟操作平台有关。

浮点型

表示方式:

1.234

1.2e3

7E-10

浮点型是一种近似值。

永远不要比两个浮点值的大小

字符串

单引号:

1.单引号里面不能嵌套单引号,如果要输出单引号,要在单引号前面加\反斜杠加以转译

2.如果要在语句最后输出反斜杠,要写两个反斜杠\\

3.在单引号中的变量,转移不能被解析,会被原样输出。

4.定义简单的字符串(不带变量),使用单引号效率会更高。

双引号:

1.可以使用转译符、

2.可以解析变量。

界定符:

1.<<<EOT  EOT;

2.界定符也要遵循命名规范。

3.结束表示符(最后的EOT)必须从第一列开始,并且出列后面的分号以外不能包含任何其他字符,空白符夜不可以。

伪类型

伪类型并不是php的基本数据类型,只是因为php是弱类型语言,所以在一些函数中,一个参数可以接受多种类型的数据,还可以接受别的函数作为毁掉函数。为了确保代码的易读性,介绍几种常用的伪:

1.mixed:  说明一个参数可以接受多种不同的(但并不是必须是所有的)类型。例如getttype()可以接受所有类型,str_replace()可以接受字符串和数组。

2.number:  说明参数可以使用interger或者float。

3.callback:  可以接受一个回调函数,还可以是一个对象的方法,包括静态的方法。

数据类型之间的相互转换

自动类型转换

强制类型转换

。数据之间的转换

1.(int)、(integer):转换成整形
2.(float)、(double)、(real):转换成浮点型
3.(string):转换成字符串
4.(bool)、(boolean):转换成布尔类型
5.(array):转换成数组
6.(object):转换成对象

PHP数据类型有三种转换方式:

1.在要转换的变量之前加上用括号括起来的目标类型
2.使用3个具体类型的转换函数,intval()、floatval()、strval()
3.使用通用类型转换函数settype(mixed var,string type)

第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
代码如下
<?php  
$num1=3.14;  
$num2=(int)$num1;  
var_dump($num1); //输出float(3.14)  
var_dump($num2); //输出int(3)  
?> 
第二种转换方式:  intval()  floatval()  strval()
代码如下
<?php  
$str="123.9abc";  
$int=intval($str);     //转换后数值:123  
$float=floatval($str); //转换后数值:123.9  
$str=strval($float);   //转换后字符串:"123.9"   
?> 

第三种转换方式:  settype();
代码如下
<?php  
$num4=12.8;  
$flg=settype($num4,"int");  
var_dump($flg);  //输出bool(true)  
var_dump($num4); //输出int(12)  
?>

常量

PHP中通过define()函数来定义常量。

常数命名与变量相似,夜遵循PHP标示的命名规则。

大小写敏感,一般总是大写。

不加$ 

格式: Boolean define(stringname,mixed value 【bool cas_insensitive】);

常量和变量

常量和变量都是PHP的存储单元,但名称、作用域及生命方式都有所不同, 一下是常量河变量的不同

常量前面没有$

常量只能用define()函数定义,不能通过语句赋值。

常量可以不用理会变量范围规则而在任何地方定义和访问。

常量一旦定义就不能被重新定义或者取消定义,直到脚本运行结束自动释放。

常量的值只表示标量,(布尔,整形,浮点,字符串)。

PHP中的魔术变量

PHP中有五个常量会根据他们使用的位置而改变,这样的常量成为“魔术常量”。

__FILE__  当前文件名

__LINE__  当前行数

__FUNCTION  当前函数名

__CLASS__  当前类名

__MERHOD__   当前对象的方法名

PHP运算符

+   -   *   /   % (取余)

PHP赋值运算符

x=y    l两侧相等

s+=y   x=x+y   加

x-=y   x=x-y    减

x=y   x=xy    乘

x/=y   x=x/y     除

x%=y  x=x%y  模数

PHP递增递减运算符






PHP  比较运算符






PHP逻辑运算符






分支结构

if

switch

循环结构

while

do..while

for

 

 

函数

函数的概述

函数是被命名的:每个函数都有一个唯一的名称,在程序的其他部分使用该名称,可以执行函数中的语句,被成为函数调用。

函数是独立的:无需程序其他部分干预,函数变能够单独执行器任务。

函数执行特定的任务:任务是程序运行期间所执行的具体工作。

函数可以将一个返回值返回调用它的程序:程序调用函数时,将执行该函数中的语句,而这些语句可以将函数返回给调用它们的程序。

自定义函数

语法格式

function 函数名(【参数1,参数2,。。。】){

函数体;

return返回值;

}

函数的语法格式说明:

1.函数有关键字function ,函数名,参数列表,函数体组成。

2.必须用关键function声明。

3.函数名代表正割函数,不能重名。命名规范遵从变量命名。

4.函数可以没有参数,但是参数列表的括号必须加。

5.函数体必须使用{}括起来。

6.return用于返回一个值。

函数通常分为:

无参无返回值

无参有返回值

有参无返回值

有参有返回值

 

 

函数调用:

无参无返回值

函数名();

有参无返回值

函数名(参数1,参数2,...);

无参无返回值

$result=函数名();

有参有返回值

$result = 函数名(参数1,参数2,...);

 

PHP变量范围

局部变量

局部变量也称为内部变量,实在内部生命的变量,其作用域也仅限函数内部。

生命周期:从定义开始到函数结束。

作用域:从定义到函数结束。

全局变量

全局变量夜成为外部变量,在函数外部定义的。

生命周期:从定义开始到文件结束。

作用域:从定义开始到文件结束。

 

使用global关键字可以将变量变为全局。

使用$GLOBAL数组(超全局变量),变量名作为key值,也可以访问全局变量。

静态变量

静态变量,使用static关键字,作用域不变,生命周期变长。

生命及应用各种形式的php函数

常规参数的函数

伪类参数函数

引用参数的函数

默认参数扥函数

可编个参数的函数

func_get_args()函数,返回参数数组。

回调函数

call_user_func_array();

 

递归函数

使用自定义函数库(哪种方式会更好)

include()

include_cone()

require()

require_once() 查看全部
php基础

php简介

php定义:

1.服务器端的语言

开发web应用这种b/s结构的软件,不仅需要编写客户端的语言,还要编写服务器短业务流程的语言组成。php就是服务器端运行的语言,只会在服务器端运行。

2.嵌入到HTML中的语言

在HTML代码中可以通过一些特殊的表示符号将各种语言嵌入(例如JavaScript)。在HTML中嵌入PHP需要在服务器中先运行完成,如果执行后有输出,则输出的结果字符串会嵌入到原来php代码处,在HTML代码一起响应给客户端浏览器器解析。

3.脚本语言

脚本语言,又称为动态语言。脚本通常以文本保存。只在被调用时进行解释编译。PHP就是文本保存格式保存在服务器端的,在请求时才由web服务器中安装的php应用模块解析,并从上到下一步一步的执行程序。

PHP都能做什么:

1.收集表单数据

2.省城动态网页

3.字符串处理

4.动态输出图像

5.处理服务器端文件系统

6.编写数据库支持的网页。

7.回话跟踪控制。

8.处理xml文件。

9.支持利用大量的网络协议

10.服务器端的其他操作。

 

环境搭建  xampp   (下载xampp 启动apach  注:如启动不了可能因为80端口被占用,这是将apach配置文件中所有80改为82或 其他,如若还是无法启动检查任务管    理器是否开启VMware,将vmvare全关闭即可)

 

基本语法

。php语言标记    

<?php?>

<script lanllguage="php"></script>

<?.........?>

<%.......%>

指令分隔符

每一条语句后面使用“:”结束。

。注释

//  单行注释

/多行注释/多行文档注释  可以方便phpdocument生成文档。

。变量和变量类型

存在8种变量类型,可以分为三类 标量类型: boolean、integer、float(double)、 string 复合类型: array、object* 特殊类型: resource、NULL

PHP中最基本的数据存储单元就是变量和常量,可以存储不同类型的数据。php是弱类型语言,变量类型有程序的上下文决定。

变量的定义:$变量名=初值;

三个常用的函数:

empty():判断一个变量是否为空。

isset():检测一个变量是否设置。

unset():释放指定变量。

变量命名

以数字字母下划线组成

不能以数字开头

区分大小写

不能使用关键字

引用赋值

$a = 10;

$b = &$a;

$a = 20;  //这时候b也是20;相当于快捷方式。

数据类型

标量:布尔型 整形 浮点型 字符串

复合类型:数组 对象

特殊类型:resource NULL

var_dump():该函数可以查看某个表达式的值和类型。

布尔类型:(true false)

以下值被认为是false,其他的值被认为true

布尔值false

整型值0

浮点值0.0

空白字符串和字符串“0”

没有成员变量的数组

没有单元的对象(仅适用php4)

特使类型NULL

整形:

可以使用十进制,八进制(数字前面加0),十六进制(数字前面加0x)

php不支持无符号整数

整形最大值跟操作平台有关。

浮点型

表示方式:

1.234

1.2e3

7E-10

浮点型是一种近似值。

永远不要比两个浮点值的大小

字符串

单引号:

1.单引号里面不能嵌套单引号,如果要输出单引号,要在单引号前面加\反斜杠加以转译

2.如果要在语句最后输出反斜杠,要写两个反斜杠\\

3.在单引号中的变量,转移不能被解析,会被原样输出。

4.定义简单的字符串(不带变量),使用单引号效率会更高。

双引号:

1.可以使用转译符、

2.可以解析变量。

界定符:

1.<<<EOT  EOT;

2.界定符也要遵循命名规范。

3.结束表示符(最后的EOT)必须从第一列开始,并且出列后面的分号以外不能包含任何其他字符,空白符夜不可以。

伪类型

伪类型并不是php的基本数据类型,只是因为php是弱类型语言,所以在一些函数中,一个参数可以接受多种类型的数据,还可以接受别的函数作为毁掉函数。为了确保代码的易读性,介绍几种常用的伪:

1.mixed:  说明一个参数可以接受多种不同的(但并不是必须是所有的)类型。例如getttype()可以接受所有类型,str_replace()可以接受字符串和数组。

2.number:  说明参数可以使用interger或者float。

3.callback:  可以接受一个回调函数,还可以是一个对象的方法,包括静态的方法。

数据类型之间的相互转换

自动类型转换

强制类型转换

。数据之间的转换

1.(int)、(integer):转换成整形
2.(float)、(double)、(real):转换成浮点型
3.(string):转换成字符串
4.(bool)、(boolean):转换成布尔类型
5.(array):转换成数组
6.(object):转换成对象

PHP数据类型有三种转换方式:

1.在要转换的变量之前加上用括号括起来的目标类型
2.使用3个具体类型的转换函数,intval()、floatval()、strval()
3.使用通用类型转换函数settype(mixed var,string type)

第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
代码如下
<?php  
$num1=3.14;  
$num2=(int)$num1;  
var_dump($num1); //输出float(3.14)  
var_dump($num2); //输出int(3)  
?> 
第二种转换方式:  intval()  floatval()  strval()
代码如下
<?php  
$str="123.9abc";  
$int=intval($str);     //转换后数值:123  
$float=floatval($str); //转换后数值:123.9  
$str=strval($float);   //转换后字符串:"123.9"   
?> 

第三种转换方式:  settype();
代码如下
<?php  
$num4=12.8;  
$flg=settype($num4,"int");  
var_dump($flg);  //输出bool(true)  
var_dump($num4); //输出int(12)  
?>

常量

PHP中通过define()函数来定义常量。

常数命名与变量相似,夜遵循PHP标示的命名规则。

大小写敏感,一般总是大写。

不加$ 

格式: Boolean define(stringname,mixed value 【bool cas_insensitive】);

常量和变量

常量和变量都是PHP的存储单元,但名称、作用域及生命方式都有所不同, 一下是常量河变量的不同

常量前面没有$

常量只能用define()函数定义,不能通过语句赋值。

常量可以不用理会变量范围规则而在任何地方定义和访问。

常量一旦定义就不能被重新定义或者取消定义,直到脚本运行结束自动释放。

常量的值只表示标量,(布尔,整形,浮点,字符串)。

PHP中的魔术变量

PHP中有五个常量会根据他们使用的位置而改变,这样的常量成为“魔术常量”。

__FILE__  当前文件名

__LINE__  当前行数

__FUNCTION  当前函数名

__CLASS__  当前类名

__MERHOD__   当前对象的方法名

PHP运算符

+   -   *   /   % (取余)

PHP赋值运算符

x=y    l两侧相等

s+=y   x=x+y   加

x-=y   x=x-y    减

x=y   x=xy    乘

x/=y   x=x/y     除

x%=y  x=x%y  模数

PHP递增递减运算符

QQ截图20160909205006.png


PHP  比较运算符

QQ截图20160909205212.png


PHP逻辑运算符

QQ截图20160909205241.png


分支结构

if

switch

循环结构

while

do..while

for

 

 

函数

函数的概述

函数是被命名的:每个函数都有一个唯一的名称,在程序的其他部分使用该名称,可以执行函数中的语句,被成为函数调用。

函数是独立的:无需程序其他部分干预,函数变能够单独执行器任务。

函数执行特定的任务:任务是程序运行期间所执行的具体工作。

函数可以将一个返回值返回调用它的程序:程序调用函数时,将执行该函数中的语句,而这些语句可以将函数返回给调用它们的程序。

自定义函数

语法格式

function 函数名(【参数1,参数2,。。。】){

函数体;

return返回值;

}

函数的语法格式说明:

1.函数有关键字function ,函数名,参数列表,函数体组成。

2.必须用关键function声明。

3.函数名代表正割函数,不能重名。命名规范遵从变量命名。

4.函数可以没有参数,但是参数列表的括号必须加。

5.函数体必须使用{}括起来。

6.return用于返回一个值。

函数通常分为:

无参无返回值

无参有返回值

有参无返回值

有参有返回值

 

 

函数调用:

无参无返回值

函数名();

有参无返回值

函数名(参数1,参数2,...);

无参无返回值

$result=函数名();

有参有返回值

$result = 函数名(参数1,参数2,...);

 

PHP变量范围

局部变量

局部变量也称为内部变量,实在内部生命的变量,其作用域也仅限函数内部。

生命周期:从定义开始到函数结束。

作用域:从定义到函数结束。

全局变量

全局变量夜成为外部变量,在函数外部定义的。

生命周期:从定义开始到文件结束。

作用域:从定义开始到文件结束。

 

使用global关键字可以将变量变为全局。

使用$GLOBAL数组(超全局变量),变量名作为key值,也可以访问全局变量。

静态变量

静态变量,使用static关键字,作用域不变,生命周期变长。

生命及应用各种形式的php函数

常规参数的函数

伪类参数函数

引用参数的函数

默认参数扥函数

可编个参数的函数

func_get_args()函数,返回参数数组。

回调函数

call_user_func_array();

 

递归函数

使用自定义函数库(哪种方式会更好)

include()

include_cone()

require()

require_once()

PHP基础

编程小六儿~ 发表了文章 • 2 个评论 • 463 次浏览 • 2016-09-09 21:17 • 来自相关话题

一、php的定义
1.服务器端的语言
2.嵌入到html中的语言
3.脚本语言

二、php都能做什么
1.收集表单数据
2.生成动态网页
3.字符串处理
4.动态输出图像
5.处理服务器端文件系统
6.编写数据库支持的网页
7.会话跟踪控制
8.处理xml文件
9.只是利用大量的网络协议
10.服务器端的其他相关操作

三、php语言标记
<?php .......   ?> 
<script language="php">
</script> 
<?.......?> <% ....... %>

四、程序注释
//单行注释
/**/ 多行注释
/**
*/多行文档注释,可以方便phpdocument生成文档

五、变量
1、变量定义
$变量名=初值;
2、三个常用函数
empty();判断一个变量是否为空
isset(); 检测一个变量是否设置
unset();释放指定变量
    
 echo $a;
 unset($a);
 if (isset($a)) {
   echo "YES";
  }else{
   echo "NO";
  }
3、变量命名
以数字,字母,下划线组成
不能以数字开头
区分大小写
不能使用关键字
4、引用赋值
     $a=10;
     $b=&$a;
     $b=20;
     echo $a;

五、数据类型
标量:布尔型 整型 浮点型 字符串
复合类型:数组 对象
特殊类型:resource NULL
 var_dump() 该函数用来查看某个表达式的值和方式

1、整型
 $n1=10;
 $n2=010; 八进制
 $n3=0x10; 十六进制
 php不支持无符号整数
 2、浮点型
是一种近似值
永远不要比较两个浮点数的大小
3、字符串
双引号:
解析变量使用双引号  
可以使用转义字符

单引号
单纯的字符串使用单引号,
单引号里不能嵌套单引号,
要输出单引号,要在 单引号之前加\进行转义
如果要在语句最后输出反斜线,要写两个反斜线\\
在单引号中的变量,转义不能被解析,会被原样输出

界定符<<<第一个界定符后不能跟空白符
第二个界定符前面也不能有空白符
搭配使用 只要两个界定符一样就可以
4、伪类型
mixed 说明一个参数可以接受多种不同的类型
number 说明参数可以使用interger或者float
callback  可以接受一个回调函数 还可以是一个对象的方法,包括静态的方法

六、数据类型之间相互转换
自动类型转换
        $s1='1abc';
        $n2=123;
        $s2=$s1+$n2;
        echo $s2;
强制类型转换
(int) (integer)  转换成整型
(bool) (boolean)  转换成布尔
(float) (double) (real)  转换成浮点型
(string) 转换成字符串
(array) 转换成数组
(object) 转换成对象
例:       
        $num1=0;
        echo  var_dump((bool)$num1);
变量测试函数
        echo  var_dump(is_bool($num1));

七、常量和变量
1、常量(一般都大写)
 例:
      define('PI', 3.1415926);
      echo PI;

2、常量和变量:
常量前面不加$
常量只能用define函数定义,不能通过语句赋值
常量可以不用理会变量范围规则而在任何地方定义和访问
常量一旦定义就不能被重新定义或者取消定义,直到脚本运行结束自动释放
常量的值只能是标量 (布尔,整型,浮点,字符串)

3、系统预定义常量
echo PHP_OS;    操作系统名称
echo PHP_VERSION;   php版本
TRUE     布尔真
FALSE    布尔假
NULL     空

4、魔术变量
 __FILE__;     当前文件名
__LINE__;当前行数
 __FUNCTION__   当前函数名
__CLASS__ 当前类名
 __METHOD__当前对象的方法名
例:
 echo __FILE__; 

八、运算符




















九、分支和循环
例:
    $num=10;
    if ($num<10) {
        echo "小于10";
    }elseif ($num ==0) {
        echo "等于0";
    }else{
        echo "大于10";
    }
例:
    $num=1;
    switch ($num) {
        case 1: 
        echo "one";
        break;
        case 2: 
        echo "two";
        break;
        case 3: 
        echo "three";
        break;
        default: 
        echo "zero" ;
        break;
    }
例:
   $count =0;
    while (true) {
        if ($count==5) {
            break;
        }
        echo "123";
        $count++;
    }
例:
do{
        static $count =0;
        echo "$count";
        $count++;
    }while ($count <5) 
例:    
    for ($i=0; $i <10; $i++) { 
     echo $i;
    }
    function sum($num1,$num2){
          return $num1+$num2;
    }
    function div($num1,$num2){
        return $num1-$num2;
    }
    function resultvalue($num1,$num2,$callback){
        return $callback($num1,$num2);
    }
    echo resultvalue(10,20,'div');

十、函数
1、函数的概述
函数是被命名的,每个函数都有唯一的名称,在程序的其他部分使用该名称,可以执行函数中的语句,被称为函数调用。
函数是独立的,无需程序的其他部分干预,函数便能够单独执行其任务
函数执行特定的任务,任务是程序运行期间所执行的具体工作
函数可以将一个返回值返回给调用他的程序,程序调用函数时,将执行该函数中的语句,而这些语句可以将信息返回给调用他们的程序
2、自定义函数
function 函数名(参数){
函数体;
return 返回值;
}
3、函数的分类
无参有返回值
有参无返回值
无参有返回值
有参有返回值
4、函数调用
无参有返回值
函数名();
有参无返回值
函数名(参数1,参数2,...);
无参有返回值
$result=函数名();
有参有返回值
$result=函数名(参数1,参数2,...);

十一、变量范围
1、局部变量
也称为内部变量,是在变量内部声明的变量,作用域仅限于函数内部
生命周期:从定义开始到函数结束
作用域:从定义开始到函数结束
2、全局变量
也称为外部变量,是在函数外部定义的
生命周期:从定义开始到文件结束
作用域:从定义开始到文件结束
使用global关键字可以将变量变为全局变量
3、静态变量
使用static关键字,作用域不变,声明周期变长

十二、回调函数 callback
实例:计算器
前端:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>登陆</title>
</head>
<body>
<form action="loginserver.php" method="GET">
     操作数1:&nbsp<input type="text" name="c1"/>
     <br/><br/>
     运算符:&nbsp&nbsp&nbsp&nbsp&nbsp<select name="ys" id="">
        <option value="sum">+</option>
        <option value="jian">-</option>
        <option value="cheng">*</option>
        <option value="chu">/</option>
             </select>
    <br/><br/>
    操作数2:&nbsp<input type="text" name="c2"/>
    <br/><br/>
    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type="submit" />   
</body>
</html>
后台
<?php
    $c1=$_GET["c1"];
    $c2=$_GET["c2"];
    $ys=$_GET["ys"];
    function sum($num1,$num2){
        return $num1+$num2;
    }
    function jian($num1,$num2){
        return $num1-$num2;
    }
    function cheng($num1,$num2){
        return $num1*$num2;
    }
    function chu($num1,$num2){
        return $num1/$num2;
    }
    function resultvalue($num1,$num2,$callback){
        return $callback($num1,$num2);
    }
    echo "运算结果:";
    echo resultvalue($c1,$c2,$ys);

?>

十三、自定义库函数
include()   
include_once()
require()
require_once()
例:
<?php
    include_once('include.php');
    include_once('include.php');
    require('include.php');
    require_once('include.php');
    fun();    
?>
<?php
    function fun(){
    echo "hello world";
    }
?>

十四、数组
1、数组分类
索引数组:索引值为整数
关联数组:索引值为字符串
2、数组定义
直接为数组赋值
$arr5[0] =10;
$arr5[1] =20;
$arr5[2] =30;
$arr5[3] =40;
print_r($arr5);

使用array()函数声明数组
$arr1=array(10,20,30,40,50);
print_r($arr1);
$arr2=array('name'=>'wys','age'=>0,'sex'=>'nv');
echo '</br>';
print_r($arr2);

使用字面量
$arr3=[10,20,30,40,50];
print_r($arr3);
echo '</br>';
$arr4=['name'=>'wys','age'=>0,'sex'=>'nv'];
print_r($arr4);
数组打印使用print_r( )     或者var_dump( )

3、数组遍历
a.使用for循环遍历数组
要求必须是下标连续的索引数组
 for($i=0;$i < count($array);i++){}

b.使用foreach语句遍历数组
第一种语法:
  foreach(array_expression as $value){  }
第二种语法:
   foreach(array_expression as $key => $value){  }
例:
$arr1=[10,'name'=>'zhangsan',20,'age'=>18];
foreach ($arr1 as $value){
    echo $value;
}
foreach ($arr1 as $key => $value){
    echo $key.':'.$value.'<br/>';
}
例:
$person=;
$person[0] = ['name'=>'wys','age'=>0,'sex'=>'nv'];
$person[1] = ['name'=>'lis','age'=>21,'sex'=>'nv'];
$person[2] = ['name'=>'kaka','age'=>20,'sex'=>'nv'];
foreach ($person as $value) {
    if ($value['age']>10) {
        foreach ($person as $key => $v) {
            echo $key.':'.$v.'<br/>';
        }
    }
}

c.联合使用list(),each()和while遍历
each():需要传递一个数组作为参数,返回数组中当前元素的键值对,并向后移动数组指针到下一个元素的位置。键值对被返回为带有四个元素关联和索引混合的数组,键名分别为0,1,key和value。其中0和key对应的值一样,1和value包含的值一样。
list();不是函数,是一种数据结构,仅仅能用于数字索引的数组并假定数字索引从0开始
例:
 $array3=['a'=>10,'b'=>20,'c'=>30];
//list不是函数,是一种数据结构,each是函数,参数是数组,每一次将索引和值一起取出
while (list($key,$value)=each($array3)) {
 echo $key.':'.$value.'<br/>';
}
注意下次使用前要调用reset()函数      reset($array3);

d.使用指针函数遍历数组
echo current($arr1);//读取目前指针所指向的内容
echo key($arr1);//将目前指针所指向的内容的索引
echo reset($arr1);//重置 无条件移动到第一个索引
echo next($arr1); //将数组中的内部指针移动到下一个单元
echo prev($arr1); //将数组的内部指针倒回一位
echo end($arr1); //将数组的内部指针指向最后一位

4、预定义数组
print_r($_SERVER); //执行环境
print_r($_GET); //经过GET请求提交到脚本的变量
print_r($_POST); //经过POST请求提交到脚本的变量
print_r($_REQUEST); //经过GET请求,POST请求提交到脚本的变量
print_r($GLOBALS); //包含一个引用指向当前脚本的全局范围内有效的变量,该数组的键名为全局变量的名称 

5、数组相关处理函数
a、value,key索引
print_r(array_values($array4));
print_r(array_keys($array5));

函数实现
//给定一个数组,取出所有value放在一个新的数组中 函数实现
function my_values($arr){
    $a1=;
    $i=0;
    foreach ($arr as $value) {
        $a1[$i]=$value;
        $i++;
    }
    return $a1;
}
print_r(my_values($array5));
function my_keys($arr){
    $a2=;
    $i=0;
    foreach ($arr as $key => $value) {
        $a2[$i]=$key;
        $i++;
    }
    return $a2;
}
print_r(my_keys($array5));

b、判断值是否在数组中
var_dump(in_array(30,$array4));

函数实现
//给定一个值,判断是否在数组中,是返回true 不是返回false 函数
function my_in($arr,$k){
    foreach ($arr as $value) {
        if ($value==$k) {
            return true;
        }
    }
    return false;
}
print_r(my_in($array4,30));

c、交换数组中索引和值
print_r(array_flip($array5));

函数实现:
function my_flip($arr){
    $a3=;
    foreach ($arr as $key => $value) {
        $a3[(string)$value]=$key;
    }
    return $a3;
}
print_r(my_flip($array5));

d、寻找值在数组中的位置
echo array_search(10, $array5);

函数实现
function my_search($arr,$k){
    foreach ($arr as $key => $value) {
        if ($value==$k) {
            return $key;
        }
    }
}
print_r (my_search($array5,10));

e、反转
$array6 = [50,'name'=>'zhangsan','age'=>10,70,100];
print_r(array_reverse($array6));

函数实现
function my_reverse($arr){
    $keys=array_keys($arr);
    $values=array_values($arr);
    $count=count($arr);
    $a4=;
    $index=0;
    for ($i=$count-1; $i >=0 ; $i--) { 
        if (is_int($keys[$i])) {
            $a4[$index]=$values[$i];
            $index++;
        }else{
            $a4[$keys[$i]]=$values[$i];
        }
    }
    return $a4;
}
print_r(my_reverse($array6));

f、统计数字重复的次数
$array7 = [10,20,10,20,30];
print_r(array_count_values($array7));

g、删除重复值
print_r(array_unique($array7));

h、用回调函数过滤某个元素
print_r(array_filter($array7,function($var){
    if ($var==10) {
        return false;
    }
    return true;
}));

i、回调函数对单个数组中的每个数进行操作
array_walk($array7, function(&$var,$n,$s){
    if ($n==4) {
        $var+=$s;
    }
},20);
print_r($array7);

j、回调函数对多个数组中的每个数进行操作

$array8 = [10,20,30,40,50];
$array9 = ['a','b','c','d','e'];
array_map(function($a1,$a2){
    echo $a1;
    echo $a2;
}, $array8,$array9)

k、数组排序
//截取
print_r (array_slice($arr1,1,2,true));

//替换
$arr3=[100,200,300];
print_r(array_splice($arr2,1,2,$arr3));
print_r($arr2);

//合并数组
$arr4=['a','b','c','d','e'];
print_r(array_combine($arr4, $arr1));

//拼接
print_r(array_merge($arr1,$arr2));

//交集和差集
$arr5=[10,20,30];
print_r(array_intersect($arr1, $arr5));
print_r(array_diff($arr1, $arr5));

//进栈和出栈
//返回值为入栈的位置
array_push($arr1,100);
//返回值为出栈的值
array_pop($arr1);

//从头删除和插入
array_shift($arr1);
array_unshift($arr1, 100);

//随机数
print_r(array_rand($arr2,2));

//指定范围的数组 最大值最小值步长
print_r(range(0,100,10));

//求和
print_r(array_sum($arr1));

l、数组运算符





十五、字符串
1、常用字符串输出函数
echo() //输出字符串
print() //输出一个或多个字符串
printf()//输出格式化字符串
 die("over");// 退出脚本使用
$str1=sprintf("word:%s",$str); //把格式化的字符串写入一个变量
2、常用字符串格式化函数
//删除左空格
$str2='  abc';
$str3='mm  ';
echo $str3.ltrim($str2);
// 删除右空格
echo rtrim($str3).ltrim($str2);
//删除两边的空格
echo trim($str3).trim($str2);
//填充
$str4='abc';
echo str_pad($str4,10,'x',STR_PAD_LEFT);
echo str_pad($str4,10,'x',STR_PAD_BOTH);
echo str_pad($str4,10,'x',STR_PAD_RIGHT);
//字符串转小写
$str5 = 'aA bB cC';
echo (strtolower($str5));
// 转大写
echo (strtoupper($str5));
//第一个大写
echo ucfirst($str5);
//每个单词的首字母大写
echo ucwords($str5);
//千分位
echo number_format(123456789);
//逆序输出
echo strrev("abcd");
//md5编码后
echo md5("abc");
//比较
echo strcmp('abc', 'aaa');

十六、正则表达式















//正则表达式
    $str = 'abcdamm';
    $reg = '/a./';
    $arr = ;
    echo preg_match_all($reg,$str,$arr);
    print_r($arr);
    $str = "今天很好";
   $reg= '/好/';
   echo (preg_replace($reg, '***', $str));

//切割
$str='aaa-bbb-ccc-ddd';
print_r(explode('-', $str));

//加上分割符
$arr = ['1970','11','05'];
echo implode('/', $arr);

十七、面向对象
1、类,属性,方法和实例化对象
//声明类
class person{
    //属性
    var $name;
    var $age;
    var $sex;
    //方法
    function walk(){
        echo "走起";
    }
}
//实例化对象
$p1=new person();
$p1->name='张三';
echo $p1->name;
$p1->walk();

2、魔术方法
例:__construct和 __get 组合使用
class Person1{
    private $name;
    private $age;
    private $sex;

    function __construct($name,$age,$sex){
        $this->name=$name;//类的内部访问属性,使用 $this->
        $this->age=$age;
        $this->sex=$sex;
    }
     
    function __destruct(){
        echo "释放空间";
    }
    function __get($propertyName){
        return $this->$propertyName;
    }

}
$p1=new Person1('小六儿','21岁','女');//调用__construct
echo '姓名:'.$p1->name;//调用__get
echo '<br/>';
echo '年龄:'.$p1->age;
echo '<br/>';
echo '性别:'.$p1->sex;
echo '<br/>';
echo '<br/>';

例: __set和__get组合使用
class Person2{
    private $name;
    private $age;
    private $sex;
    function __set($propertyName, $propertyValue){
        $this->$propertyName=$propertyValue;
    }
    function __get($propertyName){
        return $this->$propertyName;
    }

}
$p2=new Person2();
$p2->name='同桌';
$p2->age='22岁';
$p2->sex='男';
echo '姓名:'.$p2->name;
echo '<br/>';
echo '年龄:'.$p2->age;
echo '<br/>';
echo '性别:'.$p2->sex;
echo '<br/>';
echo '<br/>';

例:__set和__tostring组合   __construct和__tostring组合使用
class Person3{
    private $name;
    private $age;
    private $sex;
    // function __construct($name,$age,$sex){
    //     $this->name=$name;
    //     $this->age=$age;
    //     $this->sex=$sex;
    // }
    function __set($propertyName, $propertyValue){
         $this->$propertyName=$propertyValue;
     }
    function __tostring(){
        return "姓名:".$this->name.'<br/>'."年龄:".$this->age.'<br/>'."性别:".$this->sex.'<br/>';
    }
}
 $p2=new Person3();
 $p2->name='同桌';
 $p2->age='22岁';
 $p2->sex='男';
// $p3=new Person3('小小','20岁','女');
  echo $p2; 

3、继承和多态
a、继承
    class Person{
        private $name;
        public $age;
        protected $sex;
        function __construct($name){
            $this->name=$name;
        }
        function say(){
            echo "说话";
        }
        function eat(){
            echo $this->name."吃饭";
        }
    }
    class Student extends Person{
        // private 私有的 :本类
        // protected 受保护的 : 本类 和 子类
        // public 公有的 :本类 子类 类外
        function __construct($name){
            $this->name =$name;
        }
        function study(){
        echo $this->name.'好好学习,不顽皮';
    }
b、方法重写
//final 加在方法前面,不允许子类重写,加在类前,不允许该类继承

 class Person{

    function say(){
        echo "person";
    }
    final function eat(){     //不让子类重写
        echo "eat";
    }
}

class Student extends Person{
    function say(){
        echo "老师好";
    } 
    function eat(){           //方法重写
        echo "drink";
    }
}

c、抽象类
// 抽象类不能实例化,只能被继承,
abstract class Person{
    function eat(){
        echo "eat";
    }
 //抽象方法必须在子类实现
    abstract function say();    
}
class Student extends Person{
    function say(){
    echo "student";
}
}
$s1=new Student();
$s1->say();
$s1->eat();

d、接口
//接口不能实例化 不能写属性
interface inf{
//接口中的方法都为抽象方法,必须在类中重写
    function say();
    function eat();

}
interface inf1{
    function fun1();
}
interface inf2{
    function fun2();
}
class Person implements inf,inf1,inf2{
    function say(){
        echo "say";
    }
    function eat(){
        echo "eat";
    }
    function fun1(){
        echo "fun1";
    }
    function fun2(){
        echo "fun2";
    }
}
$p1=new Person();
$p1->say();
$p1->eat();
$p1->fun1();
$p1->fun2();

//接口 用来做任务清单
interface worklist{
    function money();
    function cook();
    function shopping();
}
class boy implements worklist{
    function money(){
        echo "挣很多钱";
    }
    function cook(){
        echo "做饭";
    }
    function shopping(){
        echo "逛街";
    }
}
$b1=new boy();
$b1->money();
$b1->cook();
$b1->shopping();

e、多态
class Person{
    function say(){
        echo "person";
    }
}
class Student extends Person{
    function stu(){
        echo "stu";
    }
}
class Teacher extends Person{
    function tea(){
        echo "tea";
    }
}
$p1=new Person();
$s1=new Student();
$t1=new Teacher();
if ($p1 instanceof Person) {//判断p1是不是person的对象
    echo "YES";
}else{
    echo "NO";
}
class cat{
}
$c1=new cat();
function fun(Person $obj){
    $obj->say();
}
fun($c1);


十八、一个程序
判断两个矩形是否相交
用点来判断
class Rect{
    private $x;
    private $y;
    private $w1;
    private $h1;

     function __construct($x,$y,$w1,$h1){
         $this->x=$x;
         $this->y=$y;
         $this->w1=$w1;
         $this->h1=$h1;

     }
     function panduan($x0,$y0,$w2,$h2)
     {
       $acx1=$this->x; //矩形1中a点c点的横坐标
       $aby1=$this->y; //矩形1中a点b点的纵坐标
       $bdx1=($this->x + $this->w1); //矩形1中b点d点的纵坐标
       $cdy1=($this->y + $this->h1); //矩形1中c点d点的纵坐标
       
       $acx2=$x0; //矩形2中a点c点的横坐标
       $aby2=$y0; //矩形2中a点b点的纵坐标
       $bdx2=($x0 + $w2); //矩形2中b点d点的纵坐标
       $cdy2=($y0 + $h2); //矩形2中c点d点的纵坐标

       if (($acx2 >= $acx1) && ($acx2 <= $bdx1) && ($aby2 >= $aby1) && ($aby2 <= $cdy1)) //判断矩形2中的a点是否在矩形1中
       { echo "相交"; }
       elseif (($bdx2 >= $acx1) && ($bdx2 <= $bdx1) && ($aby2 >= $aby1) && ($aby2 <= $cdy1)) //判断矩形2中的b点是否在矩形1中
       { echo "相交"; }
       elseif (($bdx2 >= $acx1) && ($bdx2 <= $bdx1) && ($cdy2 >= $aby1) && ($cdy2 <= $cdy1)) //判断矩形2中的d点是否在矩形1中
       { echo "相交"; }
        elseif (($acx2 >= $acx1) && ($acx2 <= $bdx1) && ($cdy2 >= $aby1) && ($cdy2 <= $cdy1)) //判断矩形2中的c点是否在矩形1中
        { echo "相交"; }
       
       elseif (($acx1 >= $acx2) && ($acx1 <= $bdx2) && ($aby1 >= $aby2) && ($aby1 <= $cdy2)) //判断矩形1中的a点是否在矩形2中
       { echo "相交"; }
       elseif (($bdx1 >= $acx2) && ($bdx1 <= $bdx2) && ($aby1 >= $aby2) && ($aby1 <= $cdy2)) //判断矩形1中的b点是否在矩形2中
       { echo "相交"; }
       elseif (($bdx1 >= $acx2) && ($bdx1 <= $bdx2) && ($cdy1 >= $aby2) && ($cdy1 <= $cdy2)) //判断矩形1中的d点是否在矩形2中
       { echo "相交"; }
        elseif (($acx1 >= $acx2) && ($acx1 <= $bdx2) && ($cdy1 >= $aby2) && ($cdy1 <= $cdy2)) //判断矩形1中的c点是否在矩形2中
        { echo "相交"; }
        else {
             echo "不相交";
        }
     }

}
$p1=new Rect(3,3,2,2);
$p1->panduan(4,4,2,2);  //测试矩形2中的a点是否在矩形1中
$p1->panduan(2,4,2,2);  //测试矩形2中的b点是否在矩形1中
$p1->panduan(2,2,2,2);  //测试矩形2中的d点是否在矩形1中
$p1->panduan(2,4,2,2);  //测试矩形2中的c点是否在矩形1中
$p1->panduan(2,2,4,2);  //测试矩形1中的a点是否在矩形2中
$p1->panduan(2,2,0.5,2);

用线来判断
class Ju{
private $x;
private $y;
private $width;
private $height;
private $x1;
private $y1;
private $width1;
private $height1;
function __construct($x,$y,$width,$height,$x1,$y1,$width1,$height1){
$this->x=$x;
$this->y=$y;
$this->width=$width;
$this->height=$height;
$this->x1=$x1;
$this->y1=$y1;
$this->width1=$width1;
$this->height1=$height1;
}
function Pan(){
if(($this->x1) > ($this->x + $this->width)){
return "没碰";
}elseif(($this->x) > ($this->x1 + $this->width1)){
return "没碰";
}elseif(($this->y1) > ($this->y + $this->height)){
return "没碰";
}elseif(($this->y) > ($this->y1 + $this->height1)){
return "没碰";
}else{
return "碰了!!!!";
}
}
}

$tt=new Ju(2,2,2,2,5,4,3,3);
echo $tt->Pan();

用面来判断
class Juxing{
    private $x1;
    private $y1;
    private $width1; //宽
    private $height1; //高
    private $x2;
    private $y2;
    private $width2;
    private $height2;
    function __construct($x1,$y1,$width1,$height1,$x2,$y2,$width2,$height2){
        $this->x1 = $x1;
        $this->y1 = $y1;
        $this->width1 = $width1;
        $this->height1 = $height1;
        $this->x2 = $x2;
        $this->y2 = $y2;
        $this->width2 = $width2;
        $this->height2 = $height2;
    }
    function panduan(){
        $xleftup = $this->x1 - $this->width2;
        $yleftup = $this->y1 - $this->height2;
        $width12 = $xleftup + $this->width2 + $this->width1;
        $height12 = $yleftup + $this->height2 + $this->height1;
        if (($this->x2 >= $xleftup)&&($this->x2 <= $width12)) {
            if (($this->y2 >= $yleftup)&&($this->y2 <= $height12)) {
                echo "两个矩形有交集";
            }else{
                echo "并没有交集";
            }
        }else{
            echo "两个矩形并没有交集";
        }
    }
}
$J1 = new Juxing(1,2,2,4,4,3,2,1);
$J1->panduan();

思路:判断点是否在面的范围内。
假设给定的初始值为2,2,2,2,1,1,1,1即第一个矩形坐标为(2,2)长高也为2,第二个矩形同理。但是我们先不讨论第二个矩形的坐标(1,1)。红圆圈的坐标($xleftup,$yleftup)。
第一步:首先我们能确定第一个矩形的位置,如图红色矩形。
第二步:若两个矩形有交集,第二个矩形【绿色的四个】应在在如图的临界位置,即第二个矩形应落在黑色矩形范围内才会有交集。(绿色的矩形是根据第二个矩形的长和高都为1来扩展延伸的)
 
END  一下午加一晚上的辛苦结果~~~~~不给宝宝赞就不和你们好了~~~~~~ค(TㅅT)ค(TㅅT)ค(TㅅT)ค(TㅅT) 查看全部
一、php的定义
1.服务器端的语言
2.嵌入到html中的语言
3.脚本语言

二、php都能做什么
1.收集表单数据
2.生成动态网页
3.字符串处理
4.动态输出图像
5.处理服务器端文件系统
6.编写数据库支持的网页
7.会话跟踪控制
8.处理xml文件
9.只是利用大量的网络协议
10.服务器端的其他相关操作

三、php语言标记
<?php .......   ?> 
<script language="php">
</script> 
<?.......?> <% ....... %>

四、程序注释
//单行注释
/**/ 多行注释
/**
*/多行文档注释,可以方便phpdocument生成文档

五、变量
1、变量定义
$变量名=初值;
2、三个常用函数
empty();判断一个变量是否为空
isset(); 检测一个变量是否设置
unset();释放指定变量
    
 echo $a;
 unset($a);
 if (isset($a)) {
   echo "YES";
  }else{
   echo "NO";
  }
3、变量命名
以数字,字母,下划线组成
不能以数字开头
区分大小写
不能使用关键字
4、引用赋值
     $a=10;
     $b=&$a;
     $b=20;
     echo $a;

五、数据类型
标量:布尔型 整型 浮点型 字符串
复合类型:数组 对象
特殊类型:resource NULL
 var_dump() 该函数用来查看某个表达式的值和方式

1、整型
 $n1=10;
 $n2=010; 八进制
 $n3=0x10; 十六进制
 php不支持无符号整数
 2、浮点型
是一种近似值
永远不要比较两个浮点数的大小
3、字符串
双引号:
解析变量使用双引号  
可以使用转义字符

单引号
单纯的字符串使用单引号,
单引号里不能嵌套单引号,
要输出单引号,要在 单引号之前加\进行转义
如果要在语句最后输出反斜线,要写两个反斜线\\
在单引号中的变量,转义不能被解析,会被原样输出

界定符<<<第一个界定符后不能跟空白符
第二个界定符前面也不能有空白符
搭配使用 只要两个界定符一样就可以
4、伪类型
mixed 说明一个参数可以接受多种不同的类型
number 说明参数可以使用interger或者float
callback  可以接受一个回调函数 还可以是一个对象的方法,包括静态的方法

六、数据类型之间相互转换
自动类型转换
        $s1='1abc';
        $n2=123;
        $s2=$s1+$n2;
        echo $s2;
强制类型转换
(int) (integer)  转换成整型
(bool) (boolean)  转换成布尔
(float) (double) (real)  转换成浮点型
(string) 转换成字符串
(array) 转换成数组
(object) 转换成对象
例:       
        $num1=0;
        echo  var_dump((bool)$num1);
变量测试函数
        echo  var_dump(is_bool($num1));

七、常量和变量
1、常量(一般都大写)
 例:
      define('PI', 3.1415926);
      echo PI;

2、常量和变量:
常量前面不加$
常量只能用define函数定义,不能通过语句赋值
常量可以不用理会变量范围规则而在任何地方定义和访问
常量一旦定义就不能被重新定义或者取消定义,直到脚本运行结束自动释放
常量的值只能是标量 (布尔,整型,浮点,字符串)

3、系统预定义常量
echo PHP_OS;    操作系统名称
echo PHP_VERSION;   php版本
TRUE     布尔真
FALSE    布尔假
NULL     空

4、魔术变量
 __FILE__;     当前文件名
__LINE__;当前行数
 __FUNCTION__   当前函数名
__CLASS__ 当前类名
 __METHOD__当前对象的方法名
例:
 echo __FILE__; 

八、运算符

1.png


2.png


3.png


4.png

九、分支和循环
例:
    $num=10;
    if ($num<10) {
        echo "小于10";
    }elseif ($num ==0) {
        echo "等于0";
    }else{
        echo "大于10";
    }
例:
    $num=1;
    switch ($num) {
        case 1: 
        echo "one";
        break;
        case 2: 
        echo "two";
        break;
        case 3: 
        echo "three";
        break;
        default: 
        echo "zero" ;
        break;
    }
例:
   $count =0;
    while (true) {
        if ($count==5) {
            break;
        }
        echo "123";
        $count++;
    }
例:
do{
        static $count =0;
        echo "$count";
        $count++;
    }while ($count <5) 
例:    
    for ($i=0; $i <10; $i++) { 
     echo $i;
    }
    function sum($num1,$num2){
          return $num1+$num2;
    }
    function div($num1,$num2){
        return $num1-$num2;
    }
    function resultvalue($num1,$num2,$callback){
        return $callback($num1,$num2);
    }
    echo resultvalue(10,20,'div');

十、函数
1、函数的概述
函数是被命名的,每个函数都有唯一的名称,在程序的其他部分使用该名称,可以执行函数中的语句,被称为函数调用。
函数是独立的,无需程序的其他部分干预,函数便能够单独执行其任务
函数执行特定的任务,任务是程序运行期间所执行的具体工作
函数可以将一个返回值返回给调用他的程序,程序调用函数时,将执行该函数中的语句,而这些语句可以将信息返回给调用他们的程序
2、自定义函数
function 函数名(参数){
函数体;
return 返回值;
}
3、函数的分类
无参有返回值
有参无返回值
无参有返回值
有参有返回值
4、函数调用
无参有返回值
函数名();
有参无返回值
函数名(参数1,参数2,...);
无参有返回值
$result=函数名();
有参有返回值
$result=函数名(参数1,参数2,...);

十一、变量范围
1、局部变量
也称为内部变量,是在变量内部声明的变量,作用域仅限于函数内部
生命周期:从定义开始到函数结束
作用域:从定义开始到函数结束
2、全局变量
也称为外部变量,是在函数外部定义的
生命周期:从定义开始到文件结束
作用域:从定义开始到文件结束
使用global关键字可以将变量变为全局变量
3、静态变量
使用static关键字,作用域不变,声明周期变长

十二、回调函数 callback
实例:计算器
前端:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>登陆</title>
</head>
<body>
<form action="loginserver.php" method="GET">
     操作数1:&nbsp<input type="text" name="c1"/>
     <br/><br/>
     运算符:&nbsp&nbsp&nbsp&nbsp&nbsp<select name="ys" id="">
        <option value="sum">+</option>
        <option value="jian">-</option>
        <option value="cheng">*</option>
        <option value="chu">/</option>
             </select>
    <br/><br/>
    操作数2:&nbsp<input type="text" name="c2"/>
    <br/><br/>
    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type="submit" />   
</body>
</html>
后台
<?php
    $c1=$_GET["c1"];
    $c2=$_GET["c2"];
    $ys=$_GET["ys"];
    function sum($num1,$num2){
        return $num1+$num2;
    }
    function jian($num1,$num2){
        return $num1-$num2;
    }
    function cheng($num1,$num2){
        return $num1*$num2;
    }
    function chu($num1,$num2){
        return $num1/$num2;
    }
    function resultvalue($num1,$num2,$callback){
        return $callback($num1,$num2);
    }
    echo "运算结果:";
    echo resultvalue($c1,$c2,$ys);

?>

十三、自定义库函数
include()   
include_once()
require()
require_once()
例:
<?php
    include_once('include.php');
    include_once('include.php');
    require('include.php');
    require_once('include.php');
    fun();    
?>
<?php
    function fun(){
    echo "hello world";
    }
?>

十四、数组
1、数组分类
索引数组:索引值为整数
关联数组:索引值为字符串
2、数组定义
直接为数组赋值
$arr5[0] =10;
$arr5[1] =20;
$arr5[2] =30;
$arr5[3] =40;
print_r($arr5);

使用array()函数声明数组
$arr1=array(10,20,30,40,50);
print_r($arr1);
$arr2=array('name'=>'wys','age'=>0,'sex'=>'nv');
echo '</br>';
print_r($arr2);

使用字面量
$arr3=[10,20,30,40,50];
print_r($arr3);
echo '</br>';
$arr4=['name'=>'wys','age'=>0,'sex'=>'nv'];
print_r($arr4);
数组打印使用print_r( )     或者var_dump( )

3、数组遍历
a.使用for循环遍历数组
要求必须是下标连续的索引数组
 for($i=0;$i < count($array);i++){}

b.使用foreach语句遍历数组
第一种语法:
  foreach(array_expression as $value){  }
第二种语法:
   foreach(array_expression as $key => $value){  }
例:
$arr1=[10,'name'=>'zhangsan',20,'age'=>18];
foreach ($arr1 as $value){
    echo $value;
}
foreach ($arr1 as $key => $value){
    echo $key.':'.$value.'<br/>';
}
例:
$person=;
$person[0] = ['name'=>'wys','age'=>0,'sex'=>'nv'];
$person[1] = ['name'=>'lis','age'=>21,'sex'=>'nv'];
$person[2] = ['name'=>'kaka','age'=>20,'sex'=>'nv'];
foreach ($person as $value) {
    if ($value['age']>10) {
        foreach ($person as $key => $v) {
            echo $key.':'.$v.'<br/>';
        }
    }
}

c.联合使用list(),each()和while遍历
each():需要传递一个数组作为参数,返回数组中当前元素的键值对,并向后移动数组指针到下一个元素的位置。键值对被返回为带有四个元素关联和索引混合的数组,键名分别为0,1,key和value。其中0和key对应的值一样,1和value包含的值一样。
list();不是函数,是一种数据结构,仅仅能用于数字索引的数组并假定数字索引从0开始
例:
 $array3=['a'=>10,'b'=>20,'c'=>30];
//list不是函数,是一种数据结构,each是函数,参数是数组,每一次将索引和值一起取出
while (list($key,$value)=each($array3)) {
 echo $key.':'.$value.'<br/>';
}
注意下次使用前要调用reset()函数      reset($array3);

d.使用指针函数遍历数组
echo current($arr1);//读取目前指针所指向的内容
echo key($arr1);//将目前指针所指向的内容的索引
echo reset($arr1);//重置 无条件移动到第一个索引
echo next($arr1); //将数组中的内部指针移动到下一个单元
echo prev($arr1); //将数组的内部指针倒回一位
echo end($arr1); //将数组的内部指针指向最后一位

4、预定义数组
print_r($_SERVER); //执行环境
print_r($_GET); //经过GET请求提交到脚本的变量
print_r($_POST); //经过POST请求提交到脚本的变量
print_r($_REQUEST); //经过GET请求,POST请求提交到脚本的变量
print_r($GLOBALS); //包含一个引用指向当前脚本的全局范围内有效的变量,该数组的键名为全局变量的名称 

5、数组相关处理函数
a、value,key索引
print_r(array_values($array4));
print_r(array_keys($array5));

函数实现
//给定一个数组,取出所有value放在一个新的数组中 函数实现
function my_values($arr){
    $a1=;
    $i=0;
    foreach ($arr as $value) {
        $a1[$i]=$value;
        $i++;
    }
    return $a1;
}
print_r(my_values($array5));
function my_keys($arr){
    $a2=;
    $i=0;
    foreach ($arr as $key => $value) {
        $a2[$i]=$key;
        $i++;
    }
    return $a2;
}
print_r(my_keys($array5));

b、判断值是否在数组中
var_dump(in_array(30,$array4));

函数实现
//给定一个值,判断是否在数组中,是返回true 不是返回false 函数
function my_in($arr,$k){
    foreach ($arr as $value) {
        if ($value==$k) {
            return true;
        }
    }
    return false;
}
print_r(my_in($array4,30));

c、交换数组中索引和值
print_r(array_flip($array5));

函数实现:
function my_flip($arr){
    $a3=;
    foreach ($arr as $key => $value) {
        $a3[(string)$value]=$key;
    }
    return $a3;
}
print_r(my_flip($array5));

d、寻找值在数组中的位置
echo array_search(10, $array5);

函数实现
function my_search($arr,$k){
    foreach ($arr as $key => $value) {
        if ($value==$k) {
            return $key;
        }
    }
}
print_r (my_search($array5,10));

e、反转
$array6 = [50,'name'=>'zhangsan','age'=>10,70,100];
print_r(array_reverse($array6));

函数实现
function my_reverse($arr){
    $keys=array_keys($arr);
    $values=array_values($arr);
    $count=count($arr);
    $a4=;
    $index=0;
    for ($i=$count-1; $i >=0 ; $i--) { 
        if (is_int($keys[$i])) {
            $a4[$index]=$values[$i];
            $index++;
        }else{
            $a4[$keys[$i]]=$values[$i];
        }
    }
    return $a4;
}
print_r(my_reverse($array6));

f、统计数字重复的次数
$array7 = [10,20,10,20,30];
print_r(array_count_values($array7));

g、删除重复值
print_r(array_unique($array7));

h、用回调函数过滤某个元素
print_r(array_filter($array7,function($var){
    if ($var==10) {
        return false;
    }
    return true;
}));

i、回调函数对单个数组中的每个数进行操作
array_walk($array7, function(&$var,$n,$s){
    if ($n==4) {
        $var+=$s;
    }
},20);
print_r($array7);

j、回调函数对多个数组中的每个数进行操作

$array8 = [10,20,30,40,50];
$array9 = ['a','b','c','d','e'];
array_map(function($a1,$a2){
    echo $a1;
    echo $a2;
}, $array8,$array9)

k、数组排序
//截取
print_r (array_slice($arr1,1,2,true));

//替换
$arr3=[100,200,300];
print_r(array_splice($arr2,1,2,$arr3));
print_r($arr2);

//合并数组
$arr4=['a','b','c','d','e'];
print_r(array_combine($arr4, $arr1));

//拼接
print_r(array_merge($arr1,$arr2));

//交集和差集
$arr5=[10,20,30];
print_r(array_intersect($arr1, $arr5));
print_r(array_diff($arr1, $arr5));

//进栈和出栈
//返回值为入栈的位置
array_push($arr1,100);
//返回值为出栈的值
array_pop($arr1);

//从头删除和插入
array_shift($arr1);
array_unshift($arr1, 100);

//随机数
print_r(array_rand($arr2,2));

//指定范围的数组 最大值最小值步长
print_r(range(0,100,10));

//求和
print_r(array_sum($arr1));

l、数组运算符

5.png

十五、字符串
1、常用字符串输出函数
echo() //输出字符串
print() //输出一个或多个字符串
printf()//输出格式化字符串
 die("over");// 退出脚本使用
$str1=sprintf("word:%s",$str); //把格式化的字符串写入一个变量
2、常用字符串格式化函数
//删除左空格
$str2='  abc';
$str3='mm  ';
echo $str3.ltrim($str2);
// 删除右空格
echo rtrim($str3).ltrim($str2);
//删除两边的空格
echo trim($str3).trim($str2);
//填充
$str4='abc';
echo str_pad($str4,10,'x',STR_PAD_LEFT);
echo str_pad($str4,10,'x',STR_PAD_BOTH);
echo str_pad($str4,10,'x',STR_PAD_RIGHT);
//字符串转小写
$str5 = 'aA bB cC';
echo (strtolower($str5));
// 转大写
echo (strtoupper($str5));
//第一个大写
echo ucfirst($str5);
//每个单词的首字母大写
echo ucwords($str5);
//千分位
echo number_format(123456789);
//逆序输出
echo strrev("abcd");
//md5编码后
echo md5("abc");
//比较
echo strcmp('abc', 'aaa');

十六、正则表达式

6.png


7.png


8.png

//正则表达式
    $str = 'abcdamm';
    $reg = '/a./';
    $arr = ;
    echo preg_match_all($reg,$str,$arr);
    print_r($arr);
    $str = "今天很好";
   $reg= '/好/';
   echo (preg_replace($reg, '***', $str));

//切割
$str='aaa-bbb-ccc-ddd';
print_r(explode('-', $str));

//加上分割符
$arr = ['1970','11','05'];
echo implode('/', $arr);

十七、面向对象
1、类,属性,方法和实例化对象
//声明类
class person{
    //属性
    var $name;
    var $age;
    var $sex;
    //方法
    function walk(){
        echo "走起";
    }
}
//实例化对象
$p1=new person();
$p1->name='张三';
echo $p1->name;
$p1->walk();

2、魔术方法
例:__construct和 __get 组合使用
class Person1{
    private $name;
    private $age;
    private $sex;

    function __construct($name,$age,$sex){
        $this->name=$name;//类的内部访问属性,使用 $this->
        $this->age=$age;
        $this->sex=$sex;
    }
     
    function __destruct(){
        echo "释放空间";
    }
    function __get($propertyName){
        return $this->$propertyName;
    }

}
$p1=new Person1('小六儿','21岁','女');//调用__construct
echo '姓名:'.$p1->name;//调用__get
echo '<br/>';
echo '年龄:'.$p1->age;
echo '<br/>';
echo '性别:'.$p1->sex;
echo '<br/>';
echo '<br/>';

例: __set和__get组合使用
class Person2{
    private $name;
    private $age;
    private $sex;
    function __set($propertyName, $propertyValue){
        $this->$propertyName=$propertyValue;
    }
    function __get($propertyName){
        return $this->$propertyName;
    }

}
$p2=new Person2();
$p2->name='同桌';
$p2->age='22岁';
$p2->sex='男';
echo '姓名:'.$p2->name;
echo '<br/>';
echo '年龄:'.$p2->age;
echo '<br/>';
echo '性别:'.$p2->sex;
echo '<br/>';
echo '<br/>';

例:__set和__tostring组合   __construct和__tostring组合使用
class Person3{
    private $name;
    private $age;
    private $sex;
    // function __construct($name,$age,$sex){
    //     $this->name=$name;
    //     $this->age=$age;
    //     $this->sex=$sex;
    // }
    function __set($propertyName, $propertyValue){
         $this->$propertyName=$propertyValue;
     }
    function __tostring(){
        return "姓名:".$this->name.'<br/>'."年龄:".$this->age.'<br/>'."性别:".$this->sex.'<br/>';
    }
}
 $p2=new Person3();
 $p2->name='同桌';
 $p2->age='22岁';
 $p2->sex='男';
// $p3=new Person3('小小','20岁','女');
  echo $p2; 

3、继承和多态
a、继承
    class Person{
        private $name;
        public $age;
        protected $sex;
        function __construct($name){
            $this->name=$name;
        }
        function say(){
            echo "说话";
        }
        function eat(){
            echo $this->name."吃饭";
        }
    }
    class Student extends Person{
        // private 私有的 :本类
        // protected 受保护的 : 本类 和 子类
        // public 公有的 :本类 子类 类外
        function __construct($name){
            $this->name =$name;
        }
        function study(){
        echo $this->name.'好好学习,不顽皮';
    }
b、方法重写
//final 加在方法前面,不允许子类重写,加在类前,不允许该类继承

 class Person{

    function say(){
        echo "person";
    }
    final function eat(){     //不让子类重写
        echo "eat";
    }
}

class Student extends Person{
    function say(){
        echo "老师好";
    } 
    function eat(){           //方法重写
        echo "drink";
    }
}

c、抽象类
// 抽象类不能实例化,只能被继承,
abstract class Person{
    function eat(){
        echo "eat";
    }
 //抽象方法必须在子类实现
    abstract function say();    
}
class Student extends Person{
    function say(){
    echo "student";
}
}
$s1=new Student();
$s1->say();
$s1->eat();

d、接口
//接口不能实例化 不能写属性
interface inf{
//接口中的方法都为抽象方法,必须在类中重写
    function say();
    function eat();

}
interface inf1{
    function fun1();
}
interface inf2{
    function fun2();
}
class Person implements inf,inf1,inf2{
    function say(){
        echo "say";
    }
    function eat(){
        echo "eat";
    }
    function fun1(){
        echo "fun1";
    }
    function fun2(){
        echo "fun2";
    }
}
$p1=new Person();
$p1->say();
$p1->eat();
$p1->fun1();
$p1->fun2();

//接口 用来做任务清单
interface worklist{
    function money();
    function cook();
    function shopping();
}
class boy implements worklist{
    function money(){
        echo "挣很多钱";
    }
    function cook(){
        echo "做饭";
    }
    function shopping(){
        echo "逛街";
    }
}
$b1=new boy();
$b1->money();
$b1->cook();
$b1->shopping();

e、多态
class Person{
    function say(){
        echo "person";
    }
}
class Student extends Person{
    function stu(){
        echo "stu";
    }
}
class Teacher extends Person{
    function tea(){
        echo "tea";
    }
}
$p1=new Person();
$s1=new Student();
$t1=new Teacher();
if ($p1 instanceof Person) {//判断p1是不是person的对象
    echo "YES";
}else{
    echo "NO";
}
class cat{
}
$c1=new cat();
function fun(Person $obj){
    $obj->say();
}
fun($c1);


十八、一个程序
判断两个矩形是否相交
用点来判断
class Rect{
    private $x;
    private $y;
    private $w1;
    private $h1;

     function __construct($x,$y,$w1,$h1){
         $this->x=$x;
         $this->y=$y;
         $this->w1=$w1;
         $this->h1=$h1;

     }
     function panduan($x0,$y0,$w2,$h2)
     {
       $acx1=$this->x; //矩形1中a点c点的横坐标
       $aby1=$this->y; //矩形1中a点b点的纵坐标
       $bdx1=($this->x + $this->w1); //矩形1中b点d点的纵坐标
       $cdy1=($this->y + $this->h1); //矩形1中c点d点的纵坐标
       
       $acx2=$x0; //矩形2中a点c点的横坐标
       $aby2=$y0; //矩形2中a点b点的纵坐标
       $bdx2=($x0 + $w2); //矩形2中b点d点的纵坐标
       $cdy2=($y0 + $h2); //矩形2中c点d点的纵坐标

       if (($acx2 >= $acx1) && ($acx2 <= $bdx1) && ($aby2 >= $aby1) && ($aby2 <= $cdy1)) //判断矩形2中的a点是否在矩形1中
       { echo "相交"; }
       elseif (($bdx2 >= $acx1) && ($bdx2 <= $bdx1) && ($aby2 >= $aby1) && ($aby2 <= $cdy1)) //判断矩形2中的b点是否在矩形1中
       { echo "相交"; }
       elseif (($bdx2 >= $acx1) && ($bdx2 <= $bdx1) && ($cdy2 >= $aby1) && ($cdy2 <= $cdy1)) //判断矩形2中的d点是否在矩形1中
       { echo "相交"; }
        elseif (($acx2 >= $acx1) && ($acx2 <= $bdx1) && ($cdy2 >= $aby1) && ($cdy2 <= $cdy1)) //判断矩形2中的c点是否在矩形1中
        { echo "相交"; }
       
       elseif (($acx1 >= $acx2) && ($acx1 <= $bdx2) && ($aby1 >= $aby2) && ($aby1 <= $cdy2)) //判断矩形1中的a点是否在矩形2中
       { echo "相交"; }
       elseif (($bdx1 >= $acx2) && ($bdx1 <= $bdx2) && ($aby1 >= $aby2) && ($aby1 <= $cdy2)) //判断矩形1中的b点是否在矩形2中
       { echo "相交"; }
       elseif (($bdx1 >= $acx2) && ($bdx1 <= $bdx2) && ($cdy1 >= $aby2) && ($cdy1 <= $cdy2)) //判断矩形1中的d点是否在矩形2中
       { echo "相交"; }
        elseif (($acx1 >= $acx2) && ($acx1 <= $bdx2) && ($cdy1 >= $aby2) && ($cdy1 <= $cdy2)) //判断矩形1中的c点是否在矩形2中
        { echo "相交"; }
        else {
             echo "不相交";
        }
     }

}
$p1=new Rect(3,3,2,2);
$p1->panduan(4,4,2,2);  //测试矩形2中的a点是否在矩形1中
$p1->panduan(2,4,2,2);  //测试矩形2中的b点是否在矩形1中
$p1->panduan(2,2,2,2);  //测试矩形2中的d点是否在矩形1中
$p1->panduan(2,4,2,2);  //测试矩形2中的c点是否在矩形1中
$p1->panduan(2,2,4,2);  //测试矩形1中的a点是否在矩形2中
$p1->panduan(2,2,0.5,2);

用线来判断
class Ju{
private $x;
private $y;
private $width;
private $height;
private $x1;
private $y1;
private $width1;
private $height1;
function __construct($x,$y,$width,$height,$x1,$y1,$width1,$height1){
$this->x=$x;
$this->y=$y;
$this->width=$width;
$this->height=$height;
$this->x1=$x1;
$this->y1=$y1;
$this->width1=$width1;
$this->height1=$height1;
}
function Pan(){
if(($this->x1) > ($this->x + $this->width)){
return "没碰";
}elseif(($this->x) > ($this->x1 + $this->width1)){
return "没碰";
}elseif(($this->y1) > ($this->y + $this->height)){
return "没碰";
}elseif(($this->y) > ($this->y1 + $this->height1)){
return "没碰";
}else{
return "碰了!!!!";
}
}
}

$tt=new Ju(2,2,2,2,5,4,3,3);
echo $tt->Pan();

用面来判断
class Juxing{
    private $x1;
    private $y1;
    private $width1; //宽
    private $height1; //高
    private $x2;
    private $y2;
    private $width2;
    private $height2;
    function __construct($x1,$y1,$width1,$height1,$x2,$y2,$width2,$height2){
        $this->x1 = $x1;
        $this->y1 = $y1;
        $this->width1 = $width1;
        $this->height1 = $height1;
        $this->x2 = $x2;
        $this->y2 = $y2;
        $this->width2 = $width2;
        $this->height2 = $height2;
    }
    function panduan(){
        $xleftup = $this->x1 - $this->width2;
        $yleftup = $this->y1 - $this->height2;
        $width12 = $xleftup + $this->width2 + $this->width1;
        $height12 = $yleftup + $this->height2 + $this->height1;
        if (($this->x2 >= $xleftup)&&($this->x2 <= $width12)) {
            if (($this->y2 >= $yleftup)&&($this->y2 <= $height12)) {
                echo "两个矩形有交集";
            }else{
                echo "并没有交集";
            }
        }else{
            echo "两个矩形并没有交集";
        }
    }
}
$J1 = new Juxing(1,2,2,4,4,3,2,1);
$J1->panduan();

思路:判断点是否在面的范围内。
假设给定的初始值为2,2,2,2,1,1,1,1即第一个矩形坐标为(2,2)长高也为2,第二个矩形同理。但是我们先不讨论第二个矩形的坐标(1,1)。红圆圈的坐标($xleftup,$yleftup)。
第一步:首先我们能确定第一个矩形的位置,如图红色矩形。
第二步:若两个矩形有交集,第二个矩形【绿色的四个】应在在如图的临界位置,即第二个矩形应落在黑色矩形范围内才会有交集。(绿色的矩形是根据第二个矩形的长和高都为1来扩展延伸的)
 
END  一下午加一晚上的辛苦结果~~~~~不给宝宝赞就不和你们好了~~~~~~ค(TㅅT)ค(TㅅT)ค(TㅅT)ค(TㅅT)

【转载】waf绕过

Web安全渗透糖醋黄瓜 发表了文章 • 5 个评论 • 383 次浏览 • 2016-09-09 19:33 • 来自相关话题

0x01: 神奇的 `  (格式输出表的那个控制符)

过空格和一些正则。

mysql> select`version`() 
    -> ;  
+----------------------+  
| `version`()          |  
+----------------------+  
| 5.1.50-community-log |  
+----------------------+  
1 row in set (0.00 sec)
一个更好玩的技巧,这个`控制符可以当注释符用(限定条件)。

mysql> select id from qs_admins where id=1;`dfff and comment it; 
+----+  
| id |  
+----+  
| 1  |  
+----+  
1 row in set (0.00 sec)
usage : where  id ='0'`'xxxxcomment on.

0x02:神奇的- + .

mysql> select id from qs_admins;  
+----+  
| id | 
+----+  
| 1  |  
+----+  
1 row in set (0.00 sec)

mysql> select+id-1+1.from qs_admins;  
+----------+  
| +id-1+1. |  
+----------+  
| 1        |  
+----------+  
1 row in set (0.00 sec)

mysql> select-id-1+3.from qs_admins;  
+----------+  
| -id-1+3. |  
+----------+  
| 1        |  
+----------+  
1 row in set (0.00 sec)
(有些人不是一直在说关键字怎么过?过滤一个from ...    就是这样连起来过)

0x03: @

mysql> select@^1.from qs_admins;  
+------|+  
| @^1. |  
+------|+  
| NULL |  
+------|+
这个是bypass  曾经dedeCMS filter .

或者这样也是ok.

0x04:mysql function() as xxx  也可以不用as 和空格

mysql> select-count(id)test from qs_admins;  
+------|+  
| test |  
+------|+  
| -1   |  
+------|+  
1 row in set (0.00 sec)

0x05:/![>5000]/ 新构造  版本号(这个可能有些过时了。)

mysql> /\!40000select\/ id from qs_admins;  
+----+  
| id |  
+----+  
|  1 |  
+----+  
1 row in set (0.00 sec)
 
大家有时间去试试,我也没试过估计有点用 查看全部
0x01: 神奇的 `  (格式输出表的那个控制符)

过空格和一些正则。

mysql> select`version`() 
    -> ;  
+----------------------+  
| `version`()          |  
+----------------------+  
| 5.1.50-community-log |  
+----------------------+  
1 row in set (0.00 sec)
一个更好玩的技巧,这个`控制符可以当注释符用(限定条件)。

mysql> select id from qs_admins where id=1;`dfff and comment it; 
+----+  
| id |  
+----+  
| 1  |  
+----+  
1 row in set (0.00 sec)
usage : where  id ='0'`'xxxxcomment on.

0x02:神奇的- + .

mysql> select id from qs_admins;  
+----+  
| id | 
+----+  
| 1  |  
+----+  
1 row in set (0.00 sec)

mysql> select+id-1+1.from qs_admins;  
+----------+  
| +id-1+1. |  
+----------+  
| 1        |  
+----------+  
1 row in set (0.00 sec)

mysql> select-id-1+3.from qs_admins;  
+----------+  
| -id-1+3. |  
+----------+  
| 1        |  
+----------+  
1 row in set (0.00 sec)
(有些人不是一直在说关键字怎么过?过滤一个from ...    就是这样连起来过)

0x03: @

mysql> select@^1.from qs_admins;  
+------|+  
| @^1. |  
+------|+  
| NULL |  
+------|+
这个是bypass  曾经dedeCMS filter .

或者这样也是ok.

0x04:mysql function() as xxx  也可以不用as 和空格

mysql> select-count(id)test from qs_admins;  
+------|+  
| test |  
+------|+  
| -1   |  
+------|+  
1 row in set (0.00 sec)

0x05:/![>5000]/ 新构造  版本号(这个可能有些过时了。)

mysql> /\!40000select\/ id from qs_admins;  
+----+  
| id |  
+----+  
|  1 |  
+----+  
1 row in set (0.00 sec)
 
大家有时间去试试,我也没试过估计有点用

php连接MySQL方法

编程katerina 发表了文章 • 3 个评论 • 378 次浏览 • 2016-09-09 19:31 • 来自相关话题

试了一下午,终于连上MySQL啦……
第一步、创建数据库
  首先在dos命令行新建了数据库“mydb”;
  详细命令:
    d:    //切到d盘,安装的时候我把xampp装在了d盘下
    cd \xampp\mysql\bin   //进入MySQL的bin目录
    mysqladmin -u root create mydb  //新建一个数据库mydb





 
第二步、连接数据库
  不知道说啥好,直接贴代码吧= =
   $dbname="mydb";
$dbserver="localhost"; //Mysql主机名
$username="root"; //Mysql用户名
$userpass=""; //Mysql密码
$connect = mysql_connect($dbserver,$username,$userpass);
if (!$connect)
{
die('Could not connect: ' . mysql_error());

第三步:创建user数据表
  if($connect){ //开始连接
mysql_select_db($dbname,$connect);
$create_table_user="CREATE TABLE `user` (
`id` TINYINT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`mail` VARCHAR(20) NOT NULL,
`sex` VARCHAR(20) NOT NULL,
UNIQUE (`id`)
)";
if(mysql_query($create_table_user)){
echo "<div align='center'><p><img src='images/ok.gif'></p><font color='#336600' size='4' face='楷体_GB2312'><b>祝贺您,建表成功!<br></b></font></div><a href=\"login1.html\">转到登录页面</a>";
exit();
}
else echo "建表失败!<br>可能原因:<br>1.您在common.inc.php中的设置不正确<br>2.已经建立了数据表guestbook<br>3.其他可能的原因";
}
else echo $connect_error_message;//处理连接失败的情况第四步:向数据库写入数据
   if($connect){ //如果数据库连接成功,则向数据库中写入数据
$dbname="mydb";
mysql_select_db($dbname,$connect);
$sql = "INSERT INTO `user` (`id`,`username`,`password`,`mail`,`sex`)
VALUES ('','$username','$pwd1','$mail','$sex')";
$result = mysql_query($sql);
if($result){
echo "<div align=\"center\"><img src='images/ok.gif'><br><p><font size=\"5\" face=\"楷体_GB2312\"><b><font color=\"#FF0000\">注册成功</font></b></font></p>";
}else{
echo("<div align='center'><p><img src='images/sorry.gif'></p><font color='#FF0000' size='4' face='楷体_GB2312'><b>对不起,注册失败,请重试!</b></font></div>");
}
}
else{
echo $connect_error_message; //处理连接失败的情况

select方法
function selectData($userId,$connect){
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("mydb", $connect);

$result = mysql_query("SELECT * FROM user WHERE username='$userId'");

echo "<table border='1'>
<tr>
<th>id</th>
<th>username</th>
<th>password</th>
<th>mail</th>
<th>sex</th>
</tr>";

while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['password'] . "</td>";
echo "<td>" . $row['mail'] . "</td>";
echo "<td>" . $row['sex'] . "</td>";
echo "</tr>";
}
echo "</table>";

}
 insertUser()方法写好了,再给写selectUser()、delUser()、updateUser()方法就实现数据库的增删改查功能啦。
  搭好站之后,就可以搞自己的站玩啦……
  最后,给大家传一个php基础的教程:点击附件下载。 查看全部
试了一下午,终于连上MySQL啦……
第一步、创建数据库
  首先在dos命令行新建了数据库“mydb”;
  详细命令:
    d:    //切到d盘,安装的时候我把xampp装在了d盘下
    cd \xampp\mysql\bin   //进入MySQL的bin目录
    mysqladmin -u root create mydb  //新建一个数据库mydb

_1.PNG

 
第二步、连接数据库
  不知道说啥好,直接贴代码吧= =
  
	$dbname="mydb";
$dbserver="localhost"; //Mysql主机名
$username="root"; //Mysql用户名
$userpass=""; //Mysql密码
$connect = mysql_connect($dbserver,$username,$userpass);
if (!$connect)
{
die('Could not connect: ' . mysql_error());

第三步:创建user数据表
  
if($connect){		//开始连接
mysql_select_db($dbname,$connect);
$create_table_user="CREATE TABLE `user` (
`id` TINYINT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`mail` VARCHAR(20) NOT NULL,
`sex` VARCHAR(20) NOT NULL,
UNIQUE (`id`)
)";
if(mysql_query($create_table_user)){
echo "<div align='center'><p><img src='images/ok.gif'></p><font color='#336600' size='4' face='楷体_GB2312'><b>祝贺您,建表成功!<br></b></font></div><a href=\"login1.html\">转到登录页面</a>";
exit();
}
else echo "建表失败!<br>可能原因:<br>1.您在common.inc.php中的设置不正确<br>2.已经建立了数据表guestbook<br>3.其他可能的原因";
}
else echo $connect_error_message;//处理连接失败的情况
第四步:向数据库写入数据
  
	if($connect){			//如果数据库连接成功,则向数据库中写入数据
$dbname="mydb";
mysql_select_db($dbname,$connect);
$sql = "INSERT INTO `user` (`id`,`username`,`password`,`mail`,`sex`)
VALUES ('','$username','$pwd1','$mail','$sex')";
$result = mysql_query($sql);
if($result){
echo "<div align=\"center\"><img src='images/ok.gif'><br><p><font size=\"5\" face=\"楷体_GB2312\"><b><font color=\"#FF0000\">注册成功</font></b></font></p>";
}else{
echo("<div align='center'><p><img src='images/sorry.gif'></p><font color='#FF0000' size='4' face='楷体_GB2312'><b>对不起,注册失败,请重试!</b></font></div>");
}
}
else{
echo $connect_error_message; //处理连接失败的情况
}
 
select方法
		function selectData($userId,$connect){
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("mydb", $connect);

$result = mysql_query("SELECT * FROM user WHERE username='$userId'");

echo "<table border='1'>
<tr>
<th>id</th>
<th>username</th>
<th>password</th>
<th>mail</th>
<th>sex</th>
</tr>";

while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['password'] . "</td>";
echo "<td>" . $row['mail'] . "</td>";
echo "<td>" . $row['sex'] . "</td>";
echo "</tr>";
}
echo "</table>";

}

 insertUser()方法写好了,再给写selectUser()、delUser()、updateUser()方法就实现数据库的增删改查功能啦。
  搭好站之后,就可以搞自己的站玩啦……
  最后,给大家传一个php基础的教程:点击附件下载。

PHP课堂知识点总结--part3

编程pygain 发表了文章 • 0 个评论 • 345 次浏览 • 2016-09-09 19:23 • 来自相关话题

今天带来的是也是PHP中的一种常见的数据类型,字符串

二.字符串

先来创建一个字符串吧:

$str='abcd';printf()输出格式化字符串;$str1=sprint()把格式化的字符串写入一个变量

1.常用字符串格式化函数

ltrim($str1)删除字符串最左侧的空白符;rtrim()删除右侧空白符;trim()删除两侧的空白符

str_pad($str1,10,'x')将字符串填充为新长度,用x填补到10位新的字符串

strtolower()字符串转小写;strtoupper()字符串转大写;ucfirst()字符串首字转大写;ucwords()字符串每个单词首字大写

number_fomat($str)通过千分位分割数字;md5($str)字符串md5加密

2.比较函数

strcmp($str)区分大小写的比较,首个不同位的AscII码比较,第一个字符串大则返回1,小则返回-1,相同返回0.

3.关于正则表达的函数

$str='12abvcdamm';
$reg='/a./';
$arr=[];
echo preg_match($reg,$str,$arr);//只匹配一次
echo preg_match_all($reg,$str,$arr);//全局匹配并输出匹配的次数

echo preg_replace($reg, '***', $str);//正则表达替换函数


str_replace(目标对象, 替换对象, 被处理的字符串,替换的次数)

4.字符串的分割和连接

$str='aaa-bbb-ccc-ddd';
print_r(explode('-', $str));//字符串切割成字符数组

$arr=['1970','11','5'];
echo implode('/', $arr);//将字符串数组组合为字符串



  查看全部
今天带来的是也是PHP中的一种常见的数据类型,字符串

二.字符串

先来创建一个字符串吧:

$str='abcd';printf()输出格式化字符串;$str1=sprint()把格式化的字符串写入一个变量

1.常用字符串格式化函数

ltrim($str1)删除字符串最左侧的空白符;rtrim()删除右侧空白符;trim()删除两侧的空白符

str_pad($str1,10,'x')将字符串填充为新长度,用x填补到10位新的字符串

strtolower()字符串转小写;strtoupper()字符串转大写;ucfirst()字符串首字转大写;ucwords()字符串每个单词首字大写

number_fomat($str)通过千分位分割数字;md5($str)字符串md5加密

2.比较函数

strcmp($str)区分大小写的比较,首个不同位的AscII码比较,第一个字符串大则返回1,小则返回-1,相同返回0.

3.关于正则表达的函数

$str='12abvcdamm';
$reg='/a./';
$arr=[];
echo preg_match($reg,$str,$arr);//只匹配一次
echo preg_match_all($reg,$str,$arr);//全局匹配并输出匹配的次数

echo preg_replace($reg, '***', $str);//正则表达替换函数


str_replace(目标对象, 替换对象, 被处理的字符串,替换的次数)

4.字符串的分割和连接

$str='aaa-bbb-ccc-ddd';
print_r(explode('-', $str));//字符串切割成字符数组

$arr=['1970','11','5'];
echo implode('/', $arr);//将字符串数组组合为字符串



 

PHP课堂知识点总结--part2

编程pygain 发表了文章 • 0 个评论 • 350 次浏览 • 2016-09-09 19:21 • 来自相关话题

小编由于为非法脱库做善后,停更了几天,向大家说声抱歉,今天给大家带来的是非常有营养的东西,那就是数组。

先来介绍下数组吧

一.数组

在PHP中,数组可以简单划分为索引数组和关联数组。索引数组即以0-9位数组成的下标(索引值);关联数组则是以字符串作为下标(键值);

先来创建一个索引数组:

$arr1= array(10,20,30,40,50,60);自变量方式创建数组下边自增$arr2=[10,20,30,40];$arr3[0]=10;$arr4[1]=20;这三种方式均可以创建数组。

创建一个关联数组:

$arr4=['name'=>'zhangsan','age'=>30,'sex'=>'man'];$arr5=('name'=>'zhangsan','age'=>30,'sex'=>'man');

打印数组:print_r($arr);查看数组中元素的个数和类型:var_dump($arr);

2 数组的遍历方式:学过C/C++会知道可以通过for循环的方式进行数组的遍历。在PHP提供了一个方便遍历数组的函数

foreach($arr1 as $value){
    echo "$value<br>";      //只需要遍历元素的值参数写成这样既可
}

foreach($arr1 as $key => $value){
    echo "$key=$value<br>";//需要遍历元素的键值时写成这样
}




3.关于转换的数组函数(逻辑好的可以自己写函数代理)

json_encode($arr)将数组转为JSON格式的字符串; json_decode($arr)将字符串转换为数组。




4.预定义数组:

$_SERVER打印当前服务器信息 $_由GET方式提交到脚本的变量;$_POST 方式提交到脚本的变量;$_REQUEST两个方式都可以提交到脚本的变量

$GLOBALS打印全局变量。




5.数组的键值操作

array_keys($arr)取出当前数组的索引或者键值组成一个新的索引数组

arrat_values($arr)取出当前数组的元素值组成一个新的索引数组

in_array($a,$arr,true)在一个数组中寻找一个元素,找到返回true否则返回false

array_flip($arr)交换当前数组的keys和values值

array_search(10,$arr)在数组中找到这个值并返回它的KEYS

arra_reverse($arr)翻转当前的数组




6.统计数组元素个数和唯一性

count($arr)数组中元素个数;array_count_values统计数组中所有值出现的个数;array_unique()删除数组中重复值

7.使用回调函数处理数组的函数值

array_filter()过滤数组内的数

print_r(array_filter($arr6,function($var){           //filter自己调用,每访问一个元素就赋值给VAR
    if($var==10){
       return false;
   }
    echo "$var";    //过滤掉10这个数
    return true;
}));




array_walk($arr6,function(&$var,$s,$n){//值,索引值,第三个参数
//        $var=$var+$n;
//                        //语法默认返回值是ture
//},'100');//可以在外头直接修改值
//print_r($arr6);//给每一个元素使用一次回调函数,做想做的操作




$arr7=[10,20,30,40,50];
$arr8=[10,15,30,35,50];
array_map(function($a1,$a2){//参数跟数组数量有关
    if($a1==$a2){
        echo "ok<br>";
    }else{
        echo "error!<br>"; //对参数数组元素进行操作并返回新值
    }
}, $arr7,$arr8)




8.数组的拆分,合并,拆分

array_slice($arr,1,2,3)截取数组 第二个参数是开始截取的下标,第三个参数是截取的长度(正数从前截取,负数从后截取)第四个参数为true时保留截取前的下标。

array_splice($arr,1,2,$arr1)先执行截取,将截取后的位置替换为新的数组

array_combine($arr1,$arr2)将数组1的值作为键值,数组2的值做为值,组成一个新数组,注意数组元素个数要一样。

array_merge($arr1,$arr2)将数组12联合

array_intersect($arr1,$arr2)寻找数组12的交集组成新的数组

array_diff($arr1,$arr2)返回数组12的差集

array_push($arr,10)将参加入到数组的尾部

array_pop($arr1)将数组的最后一个数删除

array_shift($arr1,10)在数组的头部增加一个数

array_unshift($arr)删除数组的第一个元素

array_rand($arr1,2)随机给出数组的2个key值

shuffle($arr)随机打乱数组

rang(0,20,5)快速产生数组,数组范围0-20,步长为5.








  查看全部
小编由于为非法脱库做善后,停更了几天,向大家说声抱歉,今天给大家带来的是非常有营养的东西,那就是数组。

先来介绍下数组吧

一.数组

在PHP中,数组可以简单划分为索引数组和关联数组。索引数组即以0-9位数组成的下标(索引值);关联数组则是以字符串作为下标(键值);

先来创建一个索引数组:

$arr1= array(10,20,30,40,50,60);自变量方式创建数组下边自增$arr2=[10,20,30,40];$arr3[0]=10;$arr4[1]=20;这三种方式均可以创建数组。

创建一个关联数组:

$arr4=['name'=>'zhangsan','age'=>30,'sex'=>'man'];$arr5=('name'=>'zhangsan','age'=>30,'sex'=>'man');

打印数组:print_r($arr);查看数组中元素的个数和类型:var_dump($arr);

2 数组的遍历方式:学过C/C++会知道可以通过for循环的方式进行数组的遍历。在PHP提供了一个方便遍历数组的函数

foreach($arr1 as $value){
    echo "$value<br>";      //只需要遍历元素的值参数写成这样既可
}

foreach($arr1 as $key => $value){
    echo "$key=$value<br>";//需要遍历元素的键值时写成这样
}




3.关于转换的数组函数(逻辑好的可以自己写函数代理)

json_encode($arr)将数组转为JSON格式的字符串; json_decode($arr)将字符串转换为数组。




4.预定义数组:

$_SERVER打印当前服务器信息 $_由GET方式提交到脚本的变量;$_POST 方式提交到脚本的变量;$_REQUEST两个方式都可以提交到脚本的变量

$GLOBALS打印全局变量。




5.数组的键值操作

array_keys($arr)取出当前数组的索引或者键值组成一个新的索引数组

arrat_values($arr)取出当前数组的元素值组成一个新的索引数组

in_array($a,$arr,true)在一个数组中寻找一个元素,找到返回true否则返回false

array_flip($arr)交换当前数组的keys和values值

array_search(10,$arr)在数组中找到这个值并返回它的KEYS

arra_reverse($arr)翻转当前的数组




6.统计数组元素个数和唯一性

count($arr)数组中元素个数;array_count_values统计数组中所有值出现的个数;array_unique()删除数组中重复值

7.使用回调函数处理数组的函数值

array_filter()过滤数组内的数

print_r(array_filter($arr6,function($var){           //filter自己调用,每访问一个元素就赋值给VAR
    if($var==10){
       return false;
   }
    echo "$var";    //过滤掉10这个数
    return true;
}));




array_walk($arr6,function(&$var,$s,$n){//值,索引值,第三个参数
//        $var=$var+$n;
//                        //语法默认返回值是ture
//},'100');//可以在外头直接修改值
//print_r($arr6);//给每一个元素使用一次回调函数,做想做的操作




$arr7=[10,20,30,40,50];
$arr8=[10,15,30,35,50];
array_map(function($a1,$a2){//参数跟数组数量有关
    if($a1==$a2){
        echo "ok<br>";
    }else{
        echo "error!<br>"; //对参数数组元素进行操作并返回新值
    }
}, $arr7,$arr8)




8.数组的拆分,合并,拆分

array_slice($arr,1,2,3)截取数组 第二个参数是开始截取的下标,第三个参数是截取的长度(正数从前截取,负数从后截取)第四个参数为true时保留截取前的下标。

array_splice($arr,1,2,$arr1)先执行截取,将截取后的位置替换为新的数组

array_combine($arr1,$arr2)将数组1的值作为键值,数组2的值做为值,组成一个新数组,注意数组元素个数要一样。

array_merge($arr1,$arr2)将数组12联合

array_intersect($arr1,$arr2)寻找数组12的交集组成新的数组

array_diff($arr1,$arr2)返回数组12的差集

array_push($arr,10)将参加入到数组的尾部

array_pop($arr1)将数组的最后一个数删除

array_shift($arr1,10)在数组的头部增加一个数

array_unshift($arr)删除数组的第一个元素

array_rand($arr1,2)随机给出数组的2个key值

shuffle($arr)随机打乱数组

rang(0,20,5)快速产生数组,数组范围0-20,步长为5.








 

PHP课堂知识点总结--part1

编程pygain 发表了文章 • 2 个评论 • 380 次浏览 • 2016-09-09 19:20 • 来自相关话题

今天开始接触PHP了,这真的是个非常好的语言,首先没有类型的设置,非常松散,合小编的这种不喜欢声明的懒人。其次搭载XAMPP或者小旋风就可以完成代码测试,非常方便。

1.PHP基本框架:

<?php

?>

<script language="php"></script>

每条语句后面使用分号作为分隔符,//单行注释    /多行注释/   #单行注释

2.变量:

以数字下划线和字母组成,不能以数字开头,大小写敏感,不使用关键字。

定义:$变量名=初值($a=100;)。引用赋值问题:$a=10;$b=&$a;$a=20//a,b均为20相当于将ab捆绑起来。

数据类型:标量(布尔,整型,浮点型,字符串)、复合(数组,对象)、特殊类型(resource NULL);var_dump();查看值或者表达式的类型。


科学计数法:1.2e3;7E-10,不要比较两个浮点型大小。单引号里边不能嵌套单引号,可以在内部单引号前\进行转义;

输出反斜线:\\。单引号中的变量转义不会解析,原样输出。

强制装换类型:(类型)+当前变量。

三个常用关于变量的函数:empty():判断一个变量是否为空返回true;isset():检测一个变量是否被设置返回true;unset():释放指定变量。

魔术变量(根据他们的位置而改变):__FILE__(当前文件名);__LINE__(当前行数);__FUNCTION__(当前函数名);__CALSS__(当前类名);__METHOD__.(当前对象方法名)


3.常量:

define('PI', 3+0.14);//常量只能这样定义,不能用$开头,没有范围限制,一旦定义不能改变和取消直到脚本结束,只能是标量,不能数组,对象之类.

系统的预定义常量:PHP_OS,PHP_VERSION,TRUE,FALSE,NULL,M_PL(3.1415926.......)。

4.分支结构(if ,switch):

if(3>5){
    echo "ok";
  
}else{
    echo "error";
}

$num=10;
if($num<10){
    echo "<10<br>";
}elseif($num==10){
    echo "=10<br>";

}else{
    echo ">10";
}
$num=1;
switch ($num){
    case 1:
        echo "one<br>";
        break;//找到后结束
    case 2:
        echo "two";
        break;
    case 3:
        echo"three";
        break;
       
    default:
        echo "zero";
        break;
}


5.循环结构(for ,while,do while  ):

//$count=0;
//while(true){
//    echo"123<br>";//请求需要时间
//    if($count==5){
//        break;
//        echo $count;
//    }
//    $count++;
//}

//do{
//    static $count=0;//声明周期为整个程序,预见则不在创建
//    
//    echo $count;
//    $count++;
//}while($count<5)

//for($i=0;$i<10;$i++){
//    echo $i;
//}

6.回调函数(方便修改):

function sum($num1,$num2){
    return $num1+$num2;
}
function div($num1,$num2){
    return $num1-$num2;
}
function resultValue($num1,$num2,$callback){
    return $callback($num1,$num2);
}   


echo resultValue(1,2,'sum<br>');
    echo resultValue(1,2,'div');

7.引入(两种):

include('include.php');
include_once('include.php');
require_once('include.php');//once防止重命名
require_once('include.php');
fun();




8.一个简单的计算器函数

文件1.php

<?php

    
    function add($n1,$n2){
        return $n1 + $n2;
    }
    function sub($n1,$n2){
        return $n1 - $n2;
    }
    function mul($n1,$n2){
        return $n1 * $n2;
    }
    function div($n1,$n2){
        return $n1 / $n2;
    }

    function getValue($n1,$n2,$callback){
        return $callback($n1,$n2);
    }

 

  
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $symbol = $_POST['symbol'];
    
    
    $fun;

    switch ($symbol) {
        case 'add':
            $fun = 'add';
            break;
        case 'div':
            $fun = 'sub';
            break;
        case 'multiply':
            $fun = 'mul';
            break;
        case 'divide':
            $fun = 'div';
            break;
    }

    echo getValue($num1,$num2,$fun);

    ?>




文件2 input.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>登录</title>
    </head>
    
    

    <body>
        <form action="print.php" method="POST">
            数值1:<input type="text"name="num1"/>
            <select name="symbol" >
                <option  value="add">+</option>
                <option  value="div">-</option>
                <option  value="multiply">*</option>
                <option  value="divide">/</option>
                
            </select>
            数值2<input type="text" name="num2" />
            <input type="submit"/>
        
        
        </form>
        
    </body>
</html>
  查看全部
今天开始接触PHP了,这真的是个非常好的语言,首先没有类型的设置,非常松散,合小编的这种不喜欢声明的懒人。其次搭载XAMPP或者小旋风就可以完成代码测试,非常方便。

1.PHP基本框架:

<?php

?>

<script language="php"></script>

每条语句后面使用分号作为分隔符,//单行注释    /多行注释/   #单行注释

2.变量:

以数字下划线和字母组成,不能以数字开头,大小写敏感,不使用关键字。

定义:$变量名=初值($a=100;)。引用赋值问题:$a=10;$b=&$a;$a=20//a,b均为20相当于将ab捆绑起来。

数据类型:标量(布尔,整型,浮点型,字符串)、复合(数组,对象)、特殊类型(resource NULL);var_dump();查看值或者表达式的类型。


科学计数法:1.2e3;7E-10,不要比较两个浮点型大小。单引号里边不能嵌套单引号,可以在内部单引号前\进行转义;

输出反斜线:\\。单引号中的变量转义不会解析,原样输出。

强制装换类型:(类型)+当前变量。

三个常用关于变量的函数:empty():判断一个变量是否为空返回true;isset():检测一个变量是否被设置返回true;unset():释放指定变量。

魔术变量(根据他们的位置而改变):__FILE__(当前文件名);__LINE__(当前行数);__FUNCTION__(当前函数名);__CALSS__(当前类名);__METHOD__.(当前对象方法名)


3.常量:

define('PI', 3+0.14);//常量只能这样定义,不能用$开头,没有范围限制,一旦定义不能改变和取消直到脚本结束,只能是标量,不能数组,对象之类.

系统的预定义常量:PHP_OS,PHP_VERSION,TRUE,FALSE,NULL,M_PL(3.1415926.......)。

4.分支结构(if ,switch):

if(3>5){
    echo "ok";
  
}else{
    echo "error";
}

$num=10;
if($num<10){
    echo "<10<br>";
}elseif($num==10){
    echo "=10<br>";

}else{
    echo ">10";
}
$num=1;
switch ($num){
    case 1:
        echo "one<br>";
        break;//找到后结束
    case 2:
        echo "two";
        break;
    case 3:
        echo"three";
        break;
       
    default:
        echo "zero";
        break;
}


5.循环结构(for ,while,do while  ):

//$count=0;
//while(true){
//    echo"123<br>";//请求需要时间
//    if($count==5){
//        break;
//        echo $count;
//    }
//    $count++;
//}

//do{
//    static $count=0;//声明周期为整个程序,预见则不在创建
//    
//    echo $count;
//    $count++;
//}while($count<5)

//for($i=0;$i<10;$i++){
//    echo $i;
//}

6.回调函数(方便修改):

function sum($num1,$num2){
    return $num1+$num2;
}
function div($num1,$num2){
    return $num1-$num2;
}
function resultValue($num1,$num2,$callback){
    return $callback($num1,$num2);
}   


echo resultValue(1,2,'sum<br>');
    echo resultValue(1,2,'div');

7.引入(两种):

include('include.php');
include_once('include.php');
require_once('include.php');//once防止重命名
require_once('include.php');
fun();




8.一个简单的计算器函数

文件1.php

<?php

    
    function add($n1,$n2){
        return $n1 + $n2;
    }
    function sub($n1,$n2){
        return $n1 - $n2;
    }
    function mul($n1,$n2){
        return $n1 * $n2;
    }
    function div($n1,$n2){
        return $n1 / $n2;
    }

    function getValue($n1,$n2,$callback){
        return $callback($n1,$n2);
    }

 

  
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $symbol = $_POST['symbol'];
    
    
    $fun;

    switch ($symbol) {
        case 'add':
            $fun = 'add';
            break;
        case 'div':
            $fun = 'sub';
            break;
        case 'multiply':
            $fun = 'mul';
            break;
        case 'divide':
            $fun = 'div';
            break;
    }

    echo getValue($num1,$num2,$fun);

    ?>




文件2 input.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>登录</title>
    </head>
    
    

    <body>
        <form action="print.php" method="POST">
            数值1:<input type="text"name="num1"/>
            <select name="symbol" >
                <option  value="add">+</option>
                <option  value="div">-</option>
                <option  value="multiply">*</option>
                <option  value="divide">/</option>
                
            </select>
            数值2<input type="text" name="num2" />
            <input type="submit"/>
        
        
        </form>
        
    </body>
</html>
 

无线安全忍者村-下忍的试炼(1)

无线安全ttgo2 发表了文章 • 12 个评论 • 874 次浏览 • 2016-09-09 16:44 • 来自相关话题

0x01 无线忍者村
  
   欢迎来到无线忍者村,这里是空中之城,想要在这里完成下忍的训练,必须把WIFI的基本功打扎实,才能成为高手,WIFI目前作为安全的一个研究热点,很多人直奔密码破解、中间人、数据劫持等安全问题去了,拿着几个工具一顿乱搞,根本不清楚原理和方法,其实意义不大,现在华为、中兴等网络设备厂商,在布置城市热点中,其中一个重要的环节就是wifi的安全测试。我们这个系列课程,就是轻量级的,每天学习一点,任务量不大,,细水长流,如果你能每天都进步一点一点,我相信你在不知不觉已经超越了很多人。。
 
0x 02 忍者之路
 
一、WLAN技术概述

  1.1 无线网络介绍

  1.2 wlan的发展历程

  1.3 wlan典型应用

二、WLAN标准组织介绍

  2.1 无线电管理委员会

  2.2 FCC

  2.3 ETSI

  2.4 IEEE

  2.5 WI-FI联盟

  2.6 IETF

  2.7 WAPI

三、无线射频基础

  3.1 无线射频介绍

  3.2 无线射频原理

  3.3 无线射频工作特征

四、WLAN频段介绍

  4.1 频段与信道

  4.2 2.4G频段

  4.3 5GHz

五、WLAN拓扑介绍

  5.1 WLAN组成原理

  5.2 WLAN拓扑结构

  5.3 无线分布式系统

六、IEEE 802.11 协议介绍

  6.1 IEEE 802.11a/b/g 协议

  6.2 IEEE 802.11n 协议

  6.3 IEEE 802.11ac协议
 
0x03 时间安排
  
  坚持每天都能写一篇,争取在一个月内把WIFI的基础分享完,之后就是安全,安全。。。。大家给我鼓励吧!!! 查看全部
0x01 无线忍者村
  
   欢迎来到无线忍者村,这里是空中之城,想要在这里完成下忍的训练,必须把WIFI的基本功打扎实,才能成为高手,WIFI目前作为安全的一个研究热点,很多人直奔密码破解、中间人、数据劫持等安全问题去了,拿着几个工具一顿乱搞,根本不清楚原理和方法,其实意义不大,现在华为、中兴等网络设备厂商,在布置城市热点中,其中一个重要的环节就是wifi的安全测试。我们这个系列课程,就是轻量级的,每天学习一点,任务量不大,,细水长流,如果你能每天都进步一点一点,我相信你在不知不觉已经超越了很多人。。
 
0x 02 忍者之路
 
一、WLAN技术概述

  1.1 无线网络介绍

  1.2 wlan的发展历程

  1.3 wlan典型应用

二、WLAN标准组织介绍

  2.1 无线电管理委员会

  2.2 FCC

  2.3 ETSI

  2.4 IEEE

  2.5 WI-FI联盟

  2.6 IETF

  2.7 WAPI

三、无线射频基础

  3.1 无线射频介绍

  3.2 无线射频原理

  3.3 无线射频工作特征

四、WLAN频段介绍

  4.1 频段与信道

  4.2 2.4G频段

  4.3 5GHz

五、WLAN拓扑介绍

  5.1 WLAN组成原理

  5.2 WLAN拓扑结构

  5.3 无线分布式系统

六、IEEE 802.11 协议介绍

  6.1 IEEE 802.11a/b/g 协议

  6.2 IEEE 802.11n 协议

  6.3 IEEE 802.11ac协议
 
0x03 时间安排
  
  坚持每天都能写一篇,争取在一个月内把WIFI的基础分享完,之后就是安全,安全。。。。大家给我鼓励吧!!!