PHP笔记两则附两则


1.结尾的?>

看一些比较专业的代码,发现他们的PHP文件的结尾都没有?>这个结束符.原来PHP中默认以文件尾,即EOF为结束标记,因此不加这个结束符是完全可以的.有些函数,例如header需要在任何内容输出到浏览器之前执行,如果发送了这些内容,header会失效.假设结尾标记后面有任何内容,包括空白行,当包含或执行PHP文件的时候,就会导致输出,尽管是不可见的.上面提到的方法就可以避免这个问题.

2.对象赋值

PHP里面数组,变量赋值,默认都是拷贝.之前用PHP测试红黑树的算法就碰到这个问题,需要有一种方法来模拟C语言中的指针.

如果是类的对象,情况则不同,尽管对象看起来和一般的变量,数组没什么区别,但是对象的赋值,传参,返回都是默认使用引用,不需要加&.

<?php
class test {
    public $ss ;
    
    public function printself(){
        echo $this->ss."\n";
    }
    
}

function testfunc() {
    $instance new test();
    $instance->ss = 'aa';
    $instance->printself();
    
    $an $instance;
    $an->ss = 'bb';
    
    
    $instance->printself();
    
    return $an;
}

$re = testfunc();


?>

输出

aa
bb

PHP一开始就是一个过程式语言,最初引入OOP的时候,对象和变量,数组是一样的.实际上最开始的类就是关联数组.后来OOP成为主流,对象反而成了PHP的核心内容,语法上也就对类采取特殊对待.

3.大小写的问题

感觉在服务端语言中和Javascript最接近的应该算是PHP, 两者的怪异,古怪, 奇奇怪怪的特征可谓是臭味相投. 两个都披着C语言的外衣. 任何人都可以轻易上手, 然后写很多过程式的, 丑陋的代码. 两个语言都以灵活著称, 可以非常随意的写代码. 可能CTRL+V和CTRL+C在这两种语言中的应用是最普遍的.

这篇文章原来的标题是PHP笔记两则, 本来是用来记一些使用过程中碰到的PHP的特殊之处, 但是现在碰到的越来越多, 以后可能变成4则5则.

今天这一则是名字大小写的问题. PHP里面变量名区分大小写, 函数名类名不区分大小写. 这和所有其他语言都不同. 特别是如果你有其他语言例如C语言的经验, 然后先入为主的认为所有的东西都是区分大小写的, 陡然碰到这种情况, 几乎都会半信半疑. 我首次在PHP碰到这种用法的时候, 想到的是"怎么回事? 这样也可以?".

4.isset和NULL

碰到如下代码:

    static $bbsTemplate null;
    isset($bbsTemplate) || $bbsTemplate new template(new bbsTemplate());

大概猜到了, 如果一个变量值为null, 那么isset应该是返回FALSE. 否则new永远不会执行.

虽然猜到了, 但是还是忍不住查一下手册:

若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。

果然如此, 不过还是感觉奇怪.