【php】php自带的那些函数和变量小结 - 1

下面主要是介绍自己在学习和开发过程中用到的一些函数总结

目录相关:

__DIR__常量: 表示当前执行时php文件的路径。这一个变量在单个文件内部是常量,而在不同文件下使用又是一个变量。

文件1 : web_root/public/index.php
<?php
  require '../app.php';
  echo __DIR__;  // 结果为: web_root/public

?>
文件2 : web_root/app.php
<?php
 echo __DIR__;  //结果为 web_root/
?>
访问 /public/index.php
结果为
web_root/
web_root/public

还有其他的常量,如
__FILE__ 当前PHP文件地址
__CLASS__ 当前类的名称 只在class内有用

realpath($str) 函数 返回一个美观的文件路径,比如说有时候使用了./ ../等这些相对路径操作,但影响美观以及查找文件效率,因此一般我们会采用绝对路径查找文件并 include 或者 require 进来。
return String;

文件1: web_root/public/index.php
<?php
  $config_path =  realpath('../config/config.php');
  $config  = require $config_path;
  echo $config_path;  // 结果为: web_root/config
?>
文件2 : web_root/app.php
<?php
  $db =  array(
               'host'=>'xxx',
               'name'=>'xxx',
               'pass'=>'xxx'
               );
  //返回一个数组
  return array('db'=>$db);
?>
关键: 使用realpath函数后,它会去目录下寻找是否存在指定字符串目录或文件,如果存在则返回真实绝对路径,如果不存在则返回空字符串.

define(‘常量名’,’常量值’); 函数定义全局常量
return ;

文件1: web_root/public/index.php
<?php
$app_path = realpath('..') . "/";
define('APP_PATH',$app_path);
echo APP_PATH; //输出 web_root/
?>

字符串相关:

function_exists(‘字符串’); 查看字符串是否为一个函数。有些情况下,我们会检查函数是否存在,如果不存在的话,需要提出异常或者创建等操作。一般是针对自己创建的函数是否加载进来,或者php版本升级后一些过期的函数名的检测.
return true | false;

文件1: web_root/library/functions.php
<?php
function test(){
  return true;
}
?>
文件2: web_root/test.php
<?php
include  __DIR__.'library/functions.php';
if(function_exists('test')){
  echo test();
}
?>
注意:有几个我们常用的函数如isset,empty。在这个函数里返回的是一个false结果,原因是isset,emptyinstanceOf 等操作符一样属于操作类关键字,而且传递的参数必须为变量,因此它不属于函数。

urlencode(); urldecode();函数:对传递的字符串进行加码和解码.一般来说url地址传递的值会伴有特殊字符如/+?等等,如果要正常传递这些字符的话,j就得先在客户端进行一次urlencode加码,一般js会有这样的方法提供操作。但是服务端接受的时候是加码过后的内容,要正常获取到/+?等这类字符,就需要进行urldecode进行解码。
return String;

<?php
 $url = "http://xxx?data1[]=1+2+3&data2=q?cbc";
 $rs  = urlencode($url); // rs = http%3A%2F%2Fxxx%3Fdata1%5B%5D%3D1%2B2%2B3%26data2%3D%3Fcbc
 /* 这里将 :/?+=&[] 这些符号进行了替换 */
 echo  urldecode($rs);
?>
来自官网注意:超全局变量 $_GET$_REQUEST 已经被解码了。对 $_GET$_REQUEST 里的元素使用 urldecode() 将会导致不可预计和危险的结果。

http_build_query();函数将数组转换为url请求参数的格式.返回的结果通过urlencode进行加码.
return String;

<?php
  $query = array('favor'=>array('football','basketball'),
                 'data' =>array( 'name'=>'lzx'));
  $rs    = http_build_query($query);
  // 结果为 favor%5B0%5D=football&favor%5B1%5D=basketball&data%5Bname%5D=lzx
  echo  urldecode($rs);
  // 结果为 favor[0]=football&favor[1]=basketball&data[name]=lzx
?>

parse_str()函数:传递一个url参数字符串,返回一个数组,与http_build_query()方法功能相反。通常请求参数都是通过parse_str()返回成 GET, _POST全局变量。

<?php
$_SERVER['REQUEST_METHOD']==="PUT" ? parse_str(file_get_contents('php://input', false , null, -1 , $_SERVER['CONTENT_LENGTH'] ), $_PUT): $_PUT=array();
?>
让PHP支持获取PUT方式的数据 。

strpos()方法, 获取子字符串首次出现的下标.
参数及返回值
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

$str   = "http://www.xxx.com/test.php";
$sFile = basename($str);  //输出文件名  test.php
$iDotIndex = strpos($str,".");  //如果找不到指定字符串 则返回 —1
echo $iDotIndex; // 输出 首次.号出现的位置  4 

除了strpos()函数以外,还包括stripos()函数,它与strpos()函数的区别在于它不区分大小写.

substr()方法, 获取字符串中指定的子字符串.
参数及返回值
string substr ( string $string , int $start [, int $length ] )

$str = "http://www.xxx.com/test.php";
$sFile     = basename($str);  //获取该url地址的文件名 test.php
$sFileName = substr($sFile,0,strpos($str,".")); //获取文件的文件名
$sPostfix  = substr($sFile,strpos($str,".")+1); //获取文件的后缀
echo $sFileName; //  test
echo $sPostfix;  //  php

Array数组相关函数

array_merge(array1,array2,array3…); 数组合并函数
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

情况一: 数组值附加
$a1 = array(1,2,3);
$a2 = array('a'=>1,2,'b'=>2);
array_merge($a1,$a2); // 结果 array(1,2,3,'a'=>1,2,'b'=>2);

情况二: 数组值覆盖
$a1 = array('a'=>1,3,'b'=>2);
$a2 = array('a'=>0,2,'b'=>1);
array_merge($a1,$a2); // 结果 array('a'=>0,3'b'=>1,2);

情况三: 数字索引重叠
$a1 = array(1=>1,2=>2);
$a2 = array(1=>'a',2=>'b');
array_merge($a1,$a2); // 结果 array(1=>array(1,'a'),2=>array(2,'b'));

情况四: 值全为数字
$a1 = array(2=>'a',3=>'b');
$a2 = array(1=>'z',4=>'d');
array_merge($a1,$a2); // 结果  array('a','b','z','d');

in_array() 函数-检查数组中是否存在某个值
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
参数介绍:
neddle 待搜索值
haystack 目标数组
strict 是否需要判断值类型 默认false 不判断

如果找到 needle 则返回 TRUE,否则返回 FALSE

//一般情况 $strict = false
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}

//严格情况 $strict = true
$a = array('1.10', 12.4, 1.13);

if (in_array('12.4', $a, true)) {
    echo "'12.4' found with strict check\n";
}

if (in_array(1.13, $a, true)) {
    echo "1.13 found with strict check\n";
}
// 输出 1.13 found with strict check

compact(var1,var2…)函数 整合变量于数组中.
平常有需要将一些变量整合至一个数组中,一般情况会如下所示

<?php

$username = "liyl";
$password = "123456";
$User =  compact("username","password"); 

// 另一种操作方式
// 与上结果一致,由于没有age对应的变量则不会加入到最终的结果中
$User =  compact(array("username","password"),"age"); 
?>

结果和上述一致,此时字符串将作为key,而值则会是变量 key() $user[‘username’] 的值为 “liyl”;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值