php 传值赋值与引用赋值的区别
程序员文章站
2022-04-28 15:31:09
传值赋值:当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋予到目标变量。这意味着,例如,当一个变量的值赋予另一个变量时,改变其中一个变量的值,将不会影响到另一个变量...
传值赋值:当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋予到目标变量。这意味着,例如,当一个变量的值赋予另一个变量时,改变其中一个变量的值,将不会影响到另一个变量。
<?php <?php
$a=123; $a=123;
$b=$a; $b=&$a;
$a=321; $a=321;
echo”$a,$b”;//显示”321,123” echo”$a,$b”;//显示”321,321”
?> ?>
引用赋值:新的变量简单的引用了原始变量,改变新的变量将影响到原始变量使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
类型戏法php 在变量定义中不需要(或不支持)明示的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个字符串值赋给变量 var ,var 就成了一个字符串。如果又把一个整型值赋给 var ,那它就成了一个整数。
类型强制转换
允许的强制转换有: (int),(integer) - 转换成整型 (bool),(boolean) - 转换成布尔型 (float),(double),(real) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转换成对象 settype()进行类型转换
函数settype()
[code]
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo 现在是 5 (integer)
settype($bar, "string"); // $bar 现在是 "1" (string)
?>
变量范围变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 php 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。
静态变量变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
数组php 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 php 数组作为值,也可以很容易地模拟树。
定义 array() 可以用 array() 语言结构来新建一个 array。它接受一定数量用逗号分隔的 key => value 参数对。
array( key => value , ... )
// key 可以是 integer 或者 string
// value 可以是任何值
<?php // 现在删除其中的所有单元,但保持数组本身的结构
// 创建一个简单的数组 foreach ($array as $i => $value) {
$array = array(1, 2, 3, 4, 5); unset($array[$i]);
print_r($array); }
print_r($array);
// 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array[] = 6;
print_r($array); // 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>
unset() 函数允许取消一个数组中的键名。要注意数组将不会重建索引。
<?php
$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );
unset( $a[2] );
/* 将产生一个数组,定义为
$a = array( 1=>'one', 3=>'three');
而不是
$a = array( 1 => 'one', 2 => 'three');
*/
$b = array_values($a);
// now $b is array(0 => 'one', 1 =>'three')
?>
构造函数
void __construct ([ mixed $args [, $... ]] )
php 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
note: 如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
example#1 使用新标准的构造函数
<?php
class baseclass {
function __construct() {
print "in baseclass constructor\n";
}
}
class subclass extends baseclass {
function __construct() {
parent::__construct();
print "in subclass constructor\n";
}
}
$obj = new baseclass();
$obj = new subclass();
?>
双引号里面的字段会经过编译器解释,然后再当做html代码输出。单引号里面的不进行解释,直接输出。$abc='my name is tom'; echo $abc//结果是my name is tom ;echo'$abc'//结果是$abc;echo”$abc”//结果是my name is tom
访问控制对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。
<?php
class myclass
{
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
function printhello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
抽象类php 5中引入了抽象类和抽象方法。不允许创建一个已经定义为abstract的类的一个实例。任何至少包含一个抽象方法的类也必须是抽象的。被定义为抽象的方法仅仅是声明方法的一个信号,并不能定义它们的实现。
当从一个抽象类继承时,在父类中所有抽象方法的标记的声明必须通过子类定义;另外,这些方法必须用定义相同的访问属性。例如,如果方法被定义为protected类型,执行函数必须定义为protected或public.
接口对象接口允许你创建一个指定类的方法的执行代码,而不必说明这些方法是如何被操作(处理)的。接口被用来定义接口关键字的使用,同样作为一个标准类,但没有任何方法有它们内容的定义。在接口中所有的方法必须声明为public,这是接口的特性。implements (执行,实现)为了实现一个接口,使用了implements操作。在接口中所有的方法必须在一个类的内部实现;疏忽这些将导致一个致命错误。如果渴望通过使用一个逗号分开每个接口,类可以实现多个接口。
重载方法调用和成员访问都能通过__call,__get和__set方法被加载。这些方法将只有当你试图访问不包括成员或方法的对象或继承对象时触发。不是所有的重载方法都必须被定义为static.从php 5.1.0开始也可以通过__isset()和__unset()方法逐个重载isset()和unset()函数。
php $_get变量是通过get方法从表单中获取“值”的。当使用“$_get”变量时,所有的变量名和变量值都会显示在url地址栏内;所以,当你发送的信息包含密码或是其他一些敏感信息时,就不可以再使用这种方法。
php $_post变量的作用是:获取method = “post”方法发送的表单变量。
案例
<form action="welcome.php" method="post">
enter your name:
<input type="text" name="name" />
enter your age:
<input type="text" name="age" />
<input type="submit" />
</form>
cookie通常用来验证或辨别一个用户。cookie是通过服务器发送到用户计算机中的一个小文件。每次,当相同的计算机通过浏览器请求一个页面时,原先存储的cookie也会发送到服务器。你可以使用php来创建和获取cookie的值。
<?php
setcookie("user", "alex porter", time()+3600); ?>
<html> <body></body> </html>
获取cookie值<?php
// print a cookie
echo $_cookie["user"];
// a way to view all cookies
print_r($_cookie);
?>
php session变量的作用是:存储用户的session信息,或者改变用户的session设置。session变量储存了一个单一用户的信息,它可以被所有的页面使用。
<?php session_start(); ?> <html> <body></body> </html>
mvc模式 将应用的表示与底层应用逻辑相分离 分三个部分:模型 视图 控制器
zend_controllers路由发送一个用户请求时,它会自动地在控制器目录中查找一个名为namecontroller.php的文件,这里name对应所指定的控制器名,这说明名为news的控制器对应于一个名为newscontroller.php的文件
smarty是一个php编写的模板引擎,使你能轻松地将应用输出和表示逻辑和应用逻辑分离
zend配置
1、创建本地解析c:\winnt\system32\drivers\etchosts
127.0.0.1 phpweb20 127.0.0.1 phpmyadmin
2、httpd.conf d:\appserv\apache2.2\conf
(1)打开重写引擎 hpptd.conf (没有#的是能打开的模块) #loadmodule rewrite_module
去掉前面的#
(2)打开虚拟主机 #include conf/extra/httpd-vhosts.conf 去掉前面#
3、httpd-vhosts.conf
<virtualhost *:80>
servername phpweb20
documentroot "d:\appserv\www\phpweb20\htdocs"
<directory "d:\appserv\www\phpweb20\htdocs">
allowoverride all
options all
</directory>
php_value include_path ".;d:\appserv\www\phpweb20\include;d:\appserv\php5\ext"
</virtualhost>
4、创建.htaccess
5、修改php.ini
c:\winnt
导入
php_pdo.dll
php_pdo_mysql.dll
复制代码 代码如下:
<?php <?php
$a=123; $a=123;
$b=$a; $b=&$a;
$a=321; $a=321;
echo”$a,$b”;//显示”321,123” echo”$a,$b”;//显示”321,321”
?> ?>
引用赋值:新的变量简单的引用了原始变量,改变新的变量将影响到原始变量使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
类型戏法php 在变量定义中不需要(或不支持)明示的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个字符串值赋给变量 var ,var 就成了一个字符串。如果又把一个整型值赋给 var ,那它就成了一个整数。
类型强制转换
允许的强制转换有: (int),(integer) - 转换成整型 (bool),(boolean) - 转换成布尔型 (float),(double),(real) - 转换成浮点型 (string) - 转换成字符串 (array) - 转换成数组 (object) - 转换成对象 settype()进行类型转换
函数settype()
[code]
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo 现在是 5 (integer)
settype($bar, "string"); // $bar 现在是 "1" (string)
?>
变量范围变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 php 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。
静态变量变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
数组php 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个 php 数组作为值,也可以很容易地模拟树。
定义 array() 可以用 array() 语言结构来新建一个 array。它接受一定数量用逗号分隔的 key => value 参数对。
array( key => value , ... )
// key 可以是 integer 或者 string
// value 可以是任何值
复制代码 代码如下:
<?php // 现在删除其中的所有单元,但保持数组本身的结构
// 创建一个简单的数组 foreach ($array as $i => $value) {
$array = array(1, 2, 3, 4, 5); unset($array[$i]);
print_r($array); }
print_r($array);
// 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array[] = 6;
print_r($array); // 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>
unset() 函数允许取消一个数组中的键名。要注意数组将不会重建索引。
复制代码 代码如下:
<?php
$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );
unset( $a[2] );
/* 将产生一个数组,定义为
$a = array( 1=>'one', 3=>'three');
而不是
$a = array( 1 => 'one', 2 => 'three');
*/
$b = array_values($a);
// now $b is array(0 => 'one', 1 =>'three')
?>
构造函数
void __construct ([ mixed $args [, $... ]] )
php 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
note: 如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。
example#1 使用新标准的构造函数
复制代码 代码如下:
<?php
class baseclass {
function __construct() {
print "in baseclass constructor\n";
}
}
class subclass extends baseclass {
function __construct() {
parent::__construct();
print "in subclass constructor\n";
}
}
$obj = new baseclass();
$obj = new subclass();
?>
双引号里面的字段会经过编译器解释,然后再当做html代码输出。单引号里面的不进行解释,直接输出。$abc='my name is tom'; echo $abc//结果是my name is tom ;echo'$abc'//结果是$abc;echo”$abc”//结果是my name is tom
访问控制对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。
复制代码 代码如下:
<?php
class myclass
{
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
function printhello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
抽象类php 5中引入了抽象类和抽象方法。不允许创建一个已经定义为abstract的类的一个实例。任何至少包含一个抽象方法的类也必须是抽象的。被定义为抽象的方法仅仅是声明方法的一个信号,并不能定义它们的实现。
当从一个抽象类继承时,在父类中所有抽象方法的标记的声明必须通过子类定义;另外,这些方法必须用定义相同的访问属性。例如,如果方法被定义为protected类型,执行函数必须定义为protected或public.
接口对象接口允许你创建一个指定类的方法的执行代码,而不必说明这些方法是如何被操作(处理)的。接口被用来定义接口关键字的使用,同样作为一个标准类,但没有任何方法有它们内容的定义。在接口中所有的方法必须声明为public,这是接口的特性。implements (执行,实现)为了实现一个接口,使用了implements操作。在接口中所有的方法必须在一个类的内部实现;疏忽这些将导致一个致命错误。如果渴望通过使用一个逗号分开每个接口,类可以实现多个接口。
重载方法调用和成员访问都能通过__call,__get和__set方法被加载。这些方法将只有当你试图访问不包括成员或方法的对象或继承对象时触发。不是所有的重载方法都必须被定义为static.从php 5.1.0开始也可以通过__isset()和__unset()方法逐个重载isset()和unset()函数。
php $_get变量是通过get方法从表单中获取“值”的。当使用“$_get”变量时,所有的变量名和变量值都会显示在url地址栏内;所以,当你发送的信息包含密码或是其他一些敏感信息时,就不可以再使用这种方法。
php $_post变量的作用是:获取method = “post”方法发送的表单变量。
案例
复制代码 代码如下:
<form action="welcome.php" method="post">
enter your name:
<input type="text" name="name" />
enter your age:
<input type="text" name="age" />
<input type="submit" />
</form>
cookie通常用来验证或辨别一个用户。cookie是通过服务器发送到用户计算机中的一个小文件。每次,当相同的计算机通过浏览器请求一个页面时,原先存储的cookie也会发送到服务器。你可以使用php来创建和获取cookie的值。
复制代码 代码如下:
<?php
setcookie("user", "alex porter", time()+3600); ?>
<html> <body></body> </html>
获取cookie值<?php
// print a cookie
echo $_cookie["user"];
// a way to view all cookies
print_r($_cookie);
?>
php session变量的作用是:存储用户的session信息,或者改变用户的session设置。session变量储存了一个单一用户的信息,它可以被所有的页面使用。
<?php session_start(); ?> <html> <body></body> </html>
mvc模式 将应用的表示与底层应用逻辑相分离 分三个部分:模型 视图 控制器
zend_controllers路由发送一个用户请求时,它会自动地在控制器目录中查找一个名为namecontroller.php的文件,这里name对应所指定的控制器名,这说明名为news的控制器对应于一个名为newscontroller.php的文件
smarty是一个php编写的模板引擎,使你能轻松地将应用输出和表示逻辑和应用逻辑分离
zend配置
1、创建本地解析c:\winnt\system32\drivers\etchosts
127.0.0.1 phpweb20 127.0.0.1 phpmyadmin
2、httpd.conf d:\appserv\apache2.2\conf
(1)打开重写引擎 hpptd.conf (没有#的是能打开的模块) #loadmodule rewrite_module
去掉前面的#
(2)打开虚拟主机 #include conf/extra/httpd-vhosts.conf 去掉前面#
3、httpd-vhosts.conf
复制代码 代码如下:
<virtualhost *:80>
servername phpweb20
documentroot "d:\appserv\www\phpweb20\htdocs"
<directory "d:\appserv\www\phpweb20\htdocs">
allowoverride all
options all
</directory>
php_value include_path ".;d:\appserv\www\phpweb20\include;d:\appserv\php5\ext"
</virtualhost>
4、创建.htaccess
5、修改php.ini
c:\winnt
导入
php_pdo.dll
php_pdo_mysql.dll
上一篇: C++中组合和继承的概念及意义
下一篇: C中的异常处理