在php中尽量使用单引号,直接作为字符串使用,不进行解析,节约服务器资源
在html中尽量使用双引号且在js中尽量使用单引号,否则容易与html混淆
由于PHP是弱类型语言,因此函数的输入参数类型无法确定(可以使用类型暗示,但是类型暗示无法用在诸如整型、字符串之类的标量类型上),并且对于一个函数,比如只定义了3个输入参数,PHP却在运行调用的时候输入4个或者更多的参数。因此基于这2点,注定了PHP中无法重载函数(类似Javascript语言),也无法有构造函数的重载。
由于实现函数的重载对提高开发效率很有帮助,如果能象C#或者C++那样就非常好了。事实上,PHP的确提供了一个魔术方法,mixed __call(string name, array arguments)
。这个方法在php手册中也有提及,根据官方文档,称此方法可以实现函数重载。当调用对象中一个不存在的方法的时候,如果定义了__call()方法,则会调用该方法。比如下面的代码:
<?php
class A
{
function __call($name, $args)
{
if ($name == 'f')
{
$i = count($args);
if (method_exists($this, $f = 'f' . $i)) {
call_user_func_array(array($this, $f), $args);
}
}
}
function f1($a1)
{
echo "1个参数" . $a1 . "<br/>";
}
function f2($a1, $a2)
{
echo "2个参数" . $a1 . "," . $a2 . "<br/>";
}
function f3($a1, $a2, $a3)
{
echo "3个参数" . $a1 . "," . $a2 . "," . $a3 . "<br/>";
}
}
(new A)->f('a');
(new A)->f('a', 'b');
(new A)->f('a', 'b', 'c');
?>
另外,构造函数中获取参数可以这样写:
$a = func_get_args(); // 获取构造函数中的参数
$i = count($a);
数组值传递
<?php
function main() {
$cc = array(
'a','b'
);
change($cc);
var_dump($cc);
die;
}
function change($cc){
$cc = array('dd');
}
main();
output:
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
?>
数组引用传递
<?php
function main() {
$cc = array(
'a','b'
);
change($cc);
var_dump($cc);
die;
}
function change(&$cc){
$cc = array('dd');
}
main();
?>
outpout:
array(1) {
[0]=>
string(2) "dd"
}
类对象值传递
<?php
class pp{
public $ss = 0;
}
function main() {
$p = new pp();
change($p);
var_dump($p);
die;
}
function change($p){
$p->ss = 10;
}
main();
?>
output:
object(pp)#1 (1) {
["ss"]=>
int(10)
}
类对象引用传递
<?php
class pp{
public $ss = 0;
}
function main() {
$p = new pp();
change($p);
var_dump($p);
die;
}
function change(&$p){
$p->ss = 10;
}
main();
?>
output:
object(pp)#1 (1) {
["ss"]=>
int(10)
}