几个常用的高级函数

1.php获取当前页面完整url地址的函数

function get_url(){
    $url = (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') ? 'https://' : 'http://';
    $url .= $_SERVER['HTTP_HOST'];
    $url .= isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : urlencode($_SERVER['PHP_SELF']) . '?' . urlencode($_SERVER['QUERY_STRING']);
    return $url;
}
echo get_url();

2.func_get_args()和func_num_args()

function f_test1($i)  
{  
    echo "this function have one param";  
}  
  
function f_test2($i,$j)  
{  
    echo "this function have two param";  
}  
function f_test3($i,$j,$m)  
{  
    echo "this function have three param";  
}  
function f_test()  
{  
    $args = func_get_args();  //func_get_args()得到该函数所有参数并返回数组
    var_dump($args);
    echo "---------";
    $nums = func_num_args();  //func_num_args()得到该函数所有参数的个数
    var_dump($nums);
    call_user_func_array('f_test'.$nums, $args);  //动态调用函数
}  
f_test(4,5,6); 

3.call_user_func()和call_user_func_array()

function funa($b,$c)
{
    echo $b;
    echo $c;
}
call_user_func('funa', "111","222");  //动态调用函数,参数是传入的所有参数
//显示 111 222 ,这个用法有点像javascript中的call方法

function a($b, $c)
{   
	echo $b;
    echo $c; 
}
call_user_func_array('a', array("111", "222")); //call_user_func_array(),动态调用函数,参数传入的是数组
//显示 111 222

4.get_object_vars() 返回由对象属性组成的关联数组

class Point2D{
      public $x,$y;
      public $label;
       
      public function __construct($x,$y){
      	$this->x=$x;
      	$this->y=$y;
      }
       
      public function setLabel($label){
      	$this->label=$label;
      }
      
      public function getPoint(){
      	return array('x'=>$this->x,'y'=>$this->y,'label'=>$this->label);
      }
 }

 $p1=new Point2D('1.2333','3.445');
 print_r(get_object_vars($p1));
 $p1->setLabel("point#1");
 print_r(get_object_vars($p1));
 //返回结果:
 //Array ( [x] => 1.2333 [y] => 3.445 [label] => ) Array ( [x] => 1.2333 [y] => 3.445 [label] => point#1 )
5.extract() 函数

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";

6.get_class_vars()函数,返回由对象公有属性组成的关联数组

class myclass {
    var $var1; // this has no default value...
    var $var2 = "xyz";
    var $var3 = 100;
    private $var4;
    function myclass() {
        // change some properties
        $this->var1 = "foo";
        $this->var2 = "bar";
        return true;
    }
}
$my_class = new myclass();
$class_vars = get_class_vars(get_class($my_class));
foreach ($class_vars as $name => $value) {
    echo "$name : $value\n";
}


7.bcadd()函数,2个任意精度数字的加法计算

$a = '1.234';
$b = '5';
echo bcadd($a, $b);     // 6
echo bcadd($a, $b, 4);  // 6.2340,第三个参数设置结果中小数点后的小数位数


8.array_map() 函数,对数组中的每一个元素使用回调函数

//1.用法
$arr = array(1,2,3,4,5);
function pf($num){
	return $num * $num;
}
$newArr = array_map('pf',$arr);
var_dump($newArr);
//2.示例
function deepslashes($data){  //批量转义函数
	//判断$data的表现形式,并且需要处理空的情况
	if (empty($data)){
		return $data;
	}
	return is_array($data) ? array_map('deepslashes', $data) : addslashes($data) ;
}

9.str_repeat(str.n) 重复输出n个str

echo str_repeat('a',4);   //重复输出4个a;

10.__call()和__callStatic()

__call()方法的原型如下:mixed __call(string $name,array $arguments)

当访问一个不存在的方法时,__call()会被调用,其中$name参数是要调用的方法名称,$arguments参数是一个数组,包含着要传递给该方法的参数:

<?php
class student {

	public $name='zls';
	public $age='18';

	public function eat($value=''){
		echo "I'm eat";
	}

	public function __call($name,$arguments){
		echo '函数名称为'.$name;
		var_dump($arguments);
	}
}
$student=new student();
$student->make(1,2); //make()方法不存在,则会调用__call()方法。这里参数不用写成数组的形式,因为在__call()里会自动转换
结果:函数名称为make

array (size=2)
  0 => int 1
  1 => int 2

同理,__callStatic()是在调用一个不存在的静态方法时会被调用。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值