当前位置:  编程技术>php
本页文章导读:
    ▪php取得mssql存储过程的输出参数的方法      php获取mssql存储过程的输出参数,代码如下:   代码示例: <?  $conn=mssql_connect("127.0.0.1","user","passwd");  mssql_select_db("mydb");  $stmt=mssql_init("pr_name",$conn);//  $a=50001;  mssql_bind($stmt,"RETVAL".........
    ▪深入php函数与变量作用域的详解      1,函数体、函数作用域、超全局变量 函数的返回值,函数体内的 return语句。 1,返回值,2,终止执行(终止的函数的执行) 只要出return 就不会出现执行后面的脚本。 除非在分支结构中.........
    ▪php中__get()和__set魔术方法的用法举例      在php面向对象的编程中,总是把类的属性定义为private。 但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。 类似于ja.........

[1]php取得mssql存储过程的输出参数的方法
    来源: 互联网  发布时间: 2013-12-24

php获取mssql存储过程的输出参数,代码如下:
 

代码示例:
<? 
$conn=mssql_connect("127.0.0.1","user","passwd"); 
mssql_select_db("mydb"); 
$stmt=mssql_init("pr_name",$conn);// 
$a=50001; 
mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR); //用于直接返回return -103此类的值。 
mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//用于返回在存储过程中定义的输出参数 
mssql_bind($stmt,"@invar",$a,SQLINT4); 
$result = mssql_execute($stmt,true);//不能返回结果集,只能得到输出参数 
//$result = mssql_execute($stmt,false); //返回结果集 
//$records=mssql_fetch_array($result); 
//print_r($records); 
//mssql_next_result($result);下一个结果集,当等于FALSE的时候下一个就是输出参数 
echo $b; 
echo $val; 
?> 

问题:按照惯例使用了一个MS Sql Server的存储过程procA,它给出了一个输出参数nReturn,而且返回了一个结果集。
在如何让PHP调用这个procA时,有些小问题。
本来希望这样的代码能够既得到输出参数,又得到返回的结果集:
 

代码示例:
<?php
// 初始化要传进存储过程的参数们: 
$nYear = 2004; 
$nPageSize = 20; 
$nPageNo = 1; 
// Initializes a stored procedure: 
$stmt = mssql_init("proc_stat_page", $db_mssql->Link_ID);  
// 绑定输入参数: 
mssql_bind($stmt, "@nReturn", $nReturn, SQLINT4, TRUE);  
mssql_bind($stmt, "@nYear", $nYear, SQLINT4);  
mssql_bind($stmt, "@nPageSize", $nPageSize, SQLINT4);  
mssql_bind($stmt, "@nPageNo", $nPageNo, SQLINT4);  
// 执行存储过程,得到QueryID: 
$db_mssql->Query_ID = mssql_execute($stmt,false); 
?>
 

虽然得到了结果集,但是,这样$nReturn参数是拿不到输出参数的。

如果把最后一句话改为:
 

代码示例:
$db_mssql->Query_ID = mssql_execute($stmt,true);

输出参数倒是拿到了,结果集又没有了。

解决:
在最后我们补上一句话:
 

代码示例:
// After the last result has been returned the return value will have the value returned by the stored procedure.
mssql_next_result($db_mssql->Query_ID);
 

立刻,魔法生效了:
PHP填充了正确的输出参数到$nRetVal里。


    
[2]深入php函数与变量作用域的详解
    来源: 互联网  发布时间: 2013-12-24

1,函数体、函数作用域、超全局变量
函数的返回值,函数体内的 return语句。
1,返回值,2,终止执行(终止的函数的执行)
只要出return 就不会出现执行后面的脚本。
除非在分支结构中的return。

一个函数只能有一个返回值:
但是可以有多个return语句。


返回值也存在 值传递和引用传递。
默认是值传递。可以使用引用传递:

1,在定义函数时,告知函数需要返回一个引用。
 

代码示例:
function &func(){
   return "";
}

2.在调用时,在函数前增加引用符号。
 

代码示例:
$return = &func();

PHP的作用域只有两种
1, 函数外,全局作用域。
2, 函数内,局部作用域。

法则:作用域不重叠。(全局不能访问局部,局部不能访问全局)
但是js是可重叠的。

特殊的:预定义变量(9大超全局数组变量)--注意是数组变量。
超全局:超级全局:既可以在全局使用,也可以在局部使用。所有的作用域都生效。
 

代码示例:
$_GET['v1'] = "123";
echo $_GET['v1']
 

$GLOBALS 超级全局变量,是专门保存超全局变量的,注意没有下划线。

修改全局变量,会影响GLOBALS内元素的值;

原因:使用的一个数据空间。
相当于:

代码示例:
$GLOBALS[‘v8’] = &$v8;

2. create_function --  创建函数的另一方式
 

代码示例:
  $func = create_function('$p',“echo $p);

var_dump($func); 返回一个函数名。
次函数创建出来的函数名 为lambda风格。而且在函数名前有一个 不可见字符。Ascii为0的不可见字符。
也可以调用。 $result = ”\x0“."lamba8"(20); 注意要知道函数名才可调用。

最常用的地方出现在回调函数内。
因此 create_function所创建的函数,与普通函没有区别(存在函数的三个部分);

但是此函数不可以在定以前 调用,因此 只用执行 create_function才能得到该函数。
最常用的地方:
在 callback参数上,参数create_function
相当于一个回调结构入参。

匿名函数:
匿名函数 创建的函数是没有名的, 而是一个 对象:
与create_function的区别:

匿名函数究竟是什么?
1, 将匿名函数可以当值来看待(php中是对象类型的)
2, Php是通过 类 closure  类来实现匿名函数功能的。每一个匿名函数都是Closure类一个对象。Closure单词的意思是闭包。因此有时php也将 匿名函数称之为 闭包函数。
3, 为什么一个对象可以当函数来调用?(oop)

可以使用 外层作用域的变量的语法:
注意:
外层与全局的区别。外层可能是全局,也可能是局部。看当前匿名函数是定义的位置。

Use语法默认是值传递,可以引用传递.
Callback
1, 函数名
2, Create_function
3, Function 匿名函数


    
[3]php中__get()和__set魔术方法的用法举例
    来源: 互联网  发布时间: 2013-12-24

在php面向对象的编程中,总是把类的属性定义为private。

但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。
类似于java中的javabean的操作,使用的方法也类似,只是不需要像javabean中那样,对每个字段进行set和get的操作。
只需要加上两个魔术方法即可。即私有成员的设值和取值的操作。

在PHP5中提供了专门为属性设置值和获取值的方法,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的,需要手工添加到类中,像构造方法(__construct())一样,在类中添加了才会存在。
可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:
 

代码示例:
<?php
//__set()方法用来设置私有属性
    public function __set($name,$value){
        $this->$name = $value;
    }
  
//__get()方法用来获取私有属性
    public function __get($name){
        return $this->$name;
    }
?>

__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的,但是如果你在类里面加上了这个方法,在使用“echo$p1->name”这样的语句直接获取值的时候就会自动调用__get($name)方法,将属性name传给参数$name,通过这个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。

__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了,如果没有__set()这个方法,是不允许的,比如:$this->name=‘zhangsan’,这样会出错,如果在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name,把要赋的值“zhangsan”传给$value,通过这个方法的执行,达到赋值的目的。

如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。

例如:
 

代码示例:
<?php
class Person
{
//人的成员属性,都是封装的私有成员
private $name;      //人的名子
private $sex;       //人的性别
private $age;       //人的年龄
//__get()方法用来获取私有属性
private function __get($property_name)
{
echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
if(isset()($this->$property_name))
{
return($this->$property_name);
}
else
{
return(NULL);
}
}
//__set()方法用来设置私有属性
private function __set($property_name, $value)
{
echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
$this->$property_name = $value;
}
}
$p1=newPerson();
//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值
$p1->name="张三";
$p1->sex="男";
$p1->age=20;
//直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值
echo "姓名:".$p1->name."<br>";
echo "性别:".$p1->sex."<br>";
echo "年龄:".$p1->age."<br>";
?>

程序执行结果:
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个__get()方法
姓名:张三
在直接获取私有属性值的时候,自动调用了这个__get()方法
性别:男
在直接获取私有属性值的时候,自动调用了这个__get()方法
年龄:20

以上代码,如果不加上__get()和__set()方法,程序就会出错,因为不能在类的外部操作私有成员,而上面的代码是通过自动调用__get()和__set()方法来直接存取封装的私有成员的。

就介绍这些了,希望有助于大家理解__get()与__set()的用法。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
java开源软件 iis7站长之家
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3