文档章节

php关键字记录

猿计划
 猿计划
发布于 2016/09/12 11:30
字数 2185
阅读 7
收藏 0

***********************************1.strpos — 查找字符串首次出现的位置

$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);

注意字符串位置是从0开始,而不是从1开始的

找到了返回true

$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0

******************************2.preg_match — 执行一个正则表达式匹配

$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1]将包含第一个捕获子组匹配到的文本,以此类推。

offset

通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

             flags:                         PREG_OFFSET_CAPTURE

填充的$matches数组的$matches[0][1]被填充了偏移量,也就是2.因为是扫过bc两个字符后,才找到def。所以偏移量是2.

flags的可选项貌似只有PREG_OFFSET_CAPTURE一个,手册上并没有给出其他的。

下面说offset参数。给出该参数后呢,搜索$subject的时候从offset的指定位置开始搜索,下面给出例子。

复制代码

<?php
$subject = "bcdef";
$pattern = '/def/';
preg_match($pattern, $subject, $matches1, PREG_OFFSET_CAPTURE,2);
preg_match($pattern, $subject, $matches2, PREG_OFFSET_CAPTURE,3);

echo "<pre>";print_r($matches1);echo "<pre>";
echo "<pre>";print_r($matches2);echo "<pre>";
?>

复制代码

结果为:

复制代码

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 2
        )

)
Array
(
)

复制代码

$matches1数组是从$subject字符串偏移量2之后开始的搜索,所以找到了匹配项def;而$matches2数组是$subjec字符串偏移量3之后(只剩下ef)搜索,所以无法找到匹配。所以$matches2为空。

以上是楼主的一点小心得,请大家指正。也希望能帮到大家更好的理解preg_matches()这个函数。

*****************************3.ip2long — 将一个IPV4的字符串互联网协议转换成数字格式

int ip2long ( string $ip_address )

ip_address   一个标准格式的地址

<?php
$ip = gethostbyname('www.example.com');//$ip=
93.184.216.34
$out = "The following URLs are equivalent:<br />\n";
$out .= 'http://www.example.com/, http://' . $ip . '/, and http://' . sprintf("%u", ip2long($ip)) . "/<br />\n";//sprintf("%u", ip2long($ip))=
1572395042
echo $out;
?>

 

 

{一}PHP中this,self,parent的区别之一this篇

      面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能。利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的。

PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性。这里我主要谈的是this,self,parent 三个关键字之间的区别。从字面上来理解,分别是指这、自己、父亲。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针parent是指向父类的指针。我们这里频繁使用指针来描述,是因为没有更好的语言来表达。关于指针的概念,大家可以去参考百科。

下面我们就根据实际的例子结合来讲讲。

<?php

 classname          //建立了一个名为name的类
 {
    private$name;         //定义属性,私有

    //定义构造函数,用于初始化赋值
    function __construct( $name )
    {
         $this->name =$name;         //这里已经使用了this指针语句①
    }

    //析构函数
    function __destruct(){}

    //打印用户名成员函数
    function printname()
    {
         print( $this->name);             //再次使用了this指针语句②,也可以使用echo输出
    }
 }
 $obj1 = new name("PBPHome");   //实例化对象 语句③

 //执行打印
 $obj1->printname(); //输出:PBPHome
 echo"<br>";                                    //输出:回车

 //第二次实例化对象
 $obj2 = new name( "PHP" );

 //执行打印
 $obj2->printname();                         //输出:PHP
 ?>
 

说明:上面的类分别在 语句①和语句②使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象的时候(语句③),那么当时this就是指向$obj1对象,那么执行语句②的打印时就把print( $this-><name ) 变成了 print($obj1t->name ),那么当然就输出了"PBPHome"。第二个实例的时候,print($this->name )变成了print( $obj2->name),于是就输出了"PHP"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。
 

{二}。PHP中this,self,parent的区别之二self篇

此篇我们就self的用法进行讲解

首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。假如我们使用类里面静态(一般用关键字static)的成员,我们也必须使用self来调用。还要注意使用self来调用静态变量必须使用:: (域运算符号),见实例。

 <?php

    classcounter     //定义一个counter的类
    {
        //定义属性,包括一个静态变量$firstCount,并赋初值0 语句①  
        private static $firstCount = 0;
        private $lastCount;

        //构造函数
        function __construct()
        {
             $this->lastCount =++self::$firstCount;      //使用self来调用静态变量 语句②
        }

        //打印lastCount数值
        function printLastCount()
        {
             print( $this->lastCount );
        }
    }

 //实例化对象
  $obj = new Counter();

 $obj->printLastCount();                             //执行到这里的时候,程序输出1

 ?>

这里要注意两个地方语句①和语句②。我们在语句①定义了一个静态变量$firstCount,那么在语句②的时候使用了self调用这个值,那么这时候我们调用的就是类自己定义的静态变量$frestCount。我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,因为self是指向类本身,与任何对象实例无关。然后前面使用的this调用的是实例化的对象$obj,大家不要混淆了。

关于self就说到这里,结合例子还是比较方便理解的。第二篇结束。

 

{三}PHP中this,self,parent的区别之三parent篇

此篇我们就parent的用法进行讲解。

首先,我们明确,parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。实例如下:

<?php
 //建立基类Animal
 class Animal
 {
    public $name; //基类的属性,名字$name

    //基类的构造函数,初始化赋值
    public function __construct( $name )
    {
         $this->name = $name;
    }
 }

 //定义派生类Person 继承自Animal类
 class Person extends Animal
 {
    public$personSex;       //对于派生类,新定义了属性$personSex性别、$personAge年龄
    public $personAge;

    //派生类的构造函数
    function __construct( $personSex, $personAge )
    {
         parent::__construct( "PBPHome");    //使用parent调用了父类的构造函数 语句①
         $this->personSex = $personSex;
         $this->personAge = $personAge;
    }

    //派生类的成员函数,用于打印,格式:名字 is name,age is 年龄
    function printPerson()
    {
         print( $this->name. " is ".$this->personSex. ",age is ".$this->personAge );
     }
 }

 //实例化Person对象
 $personObject = new Person( "male", "21");

 //执行打印
 $personObject->printPerson();//输出结果:PBPHome is male,age is 21

 ?>

里面同样含有this的用法,大家自己分析。我们注意这么个细节:成员属性都是public(公有属性和方法,类内部和外部的代码均可访问)的,特别是父类的,这是为了供继承类通过this来访问。关键点在语句①:parent::__construct( "heiyeluren"),这时候我们就使用parent来调用父类的构造函数进行对父类的初始化,这样,继承类的对象就都给赋值了name为PBPHome。我们可以测试下,再实例化一个对象$personObject1,执行打印后name仍然是PBPHome。

总结:this是指向对象实例的一个指针,在实例化的时候来确定指向;self是对类本身的一个引用,一般用来指向类中的静态变量;parent是对父类的引用,一般使用parent来调用父类的构造函数。

 

 

**************************4.unset — 释放给定的变量

如果您想在函数中 unset()一个全局变量,可使用 $GLOBALS数组来实现:

<?php
function foo()
{
unset($GLOBALS['bar']);
}

$bar = "something";
foo();
?>

结果什么都没有

如果在函数中 unset()一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。

<?php
function foo(&$bar) {
unset($bar);
$bar = "blah";
}

$bar = 'something';
echo "$bar\n";

foo($bar);
echo "$bar\n";
?>

 

以上例程会输出:

 

something
something

 

如果在函数中 unset()一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。

<?php
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}

foo();
foo();
foo();
?>

 

以上例程会输出:

 

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

************************5.

本文转载自:http://www.cnblogs.com/myjavawork/articles/1793664.html

猿计划
粉丝 0
博文 16
码字总数 3823
作品 0
渝中
程序员
私信 提问
PHPer面试指南-算法篇

本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide 算法可以说是大厂的必考题,对于算法,一定要理解其中的精髓、原理。 冒泡排序 冒泡排序的原理:一组数据,比较相邻数...

angkee
2018/01/24
0
0
PHP算法:折半查找法(又称二分查找法)

二分查找又称折半查找 ,它是一种效率较高的查找方法。 【二分查找要求】: 1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 【优缺点】折半查找法的优点是比较次数少,查找速度快,平...

岭南六少
2011/07/11
216
0
php 二分查找法算法详解

一、概念:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先...

Yomut
2015/11/25
518
0
记录方维p2p项目后台登录自动化测试验证码问题

登录自动化测试的时候,一般都会遇到验证码问题。常见的解决方法见:http://www.cnblogs.com/fnng/p/3606934.html 本文参考万能码的解决方法。由于该项目是自己用来学习的,所以没有所谓的去...

不最醉不龟归
2016/11/08
381
0
linux个人常用命令备注

1.使用find命令和grep命令,配合查找相关后缀的文件里面含有某关键字的内容: 查找当前目录中所有以php结尾的文件,列出这些文件中哪些含有‘社会’这个关键字 2.vi编辑器中,需要查找替换的...

不最醉不龟归
2016/09/25
28
0

没有更多内容

加载失败,请刷新页面

加载更多

让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁

上交大计算科学与工程系俞凯教授,5分钟口述讲解,带你快速认识了解年度重磅图书《强化学习(第二版)》! 在 AlphaGo战胜李世石之后,AlphaZero以其完全凭借自我学习超越人类在各种棋类游戏...

博文视点Bv
14分钟前
5
0
TLA7-EVM开发板的处理器、NOR FLASH、DDR3

TLA7-EVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能。核心板尺寸仅70mm*50mm,底板采用沉金无铅工艺的6层板设计,专业的PCB...

Tronlong创龙
22分钟前
3
0
UUID的变种-有序

为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。 /// <summary> //...

Canaan_
23分钟前
3
0
Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferF...

江左煤郎
27分钟前
3
0
AngularDOM操作

gtandsn
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部