在PHP中,=>操作符通常用于数组操作中,一般形式如下: array( key => value , ... ) 键(key) 可以是一个整数(integer) 或 字符串(string), 值(value) 可以是任意类型的值。如: $arr = array("foo" => "bar", 12 => true); =================================== -> 操作符用于类、对象的操作中,以下是示例:<?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); ?>
,|这三个运算符不是同一种运算符,&和^属于位运算符,||属于逻辑运算符,|属于位运算符,&即按位与 ,把$a和$b中都为1的位设为1,否则为0,用于二进制的位运算。逻辑运算符||,同为假才是假,否则为真。^相同则为0,不同则为1,同样用于二进制的位运算
主要原因是这四个操作符没有side effect,因此,它们必须构造一个对象作为返回值,引用总结
说错了, && 和 and, || 和 or 是分别相同的,只是 and 和 or 运算优先级低,比 = 还低。
// 以下两行完全一样$a = ($b && $c);$a = ($b and $c); // 以下两行不一样了$a = $b && $c;$a = $b and $c;// 实际上相当于这样:$a = ($b && $c);($a = $b) and $c;// or 同理
在看看你的题意:
&& 相当于 if(a)b; 而 || 相当于 if(!a)b;
也就是说 && 要 a 为真才执行,而 || 是要 a 为假才执行。
如果用 and 和 or,就要注意,赋值 = 的时候 想要的到底是什么样的值
给这个方法传递变量的引用,类似c中的指针一样,传递的时变量的内存地址。
这样,next方法内部就会直接操作传递过去的array变量。
不带引用,就相当于给了一份拷贝,原本的值是不变的。
for example:
1、function next(array &$array){ //各种操作}$arr = array(1,2,3);next($arr);//这里不需要加&符号var_dump($arr);//这时$arr已经被next()处理改变了2、/*如果是不带引用的方法*/function next(array $array){ //各种操作 return $array;//注意这里有返回值}$arr = array(1,2,3);$arr2 = array();$arr2 = next($arr);//next方法有返回值,并赋给了$arr2,并且$arr没有变化var_dump($arr);var_dump($arr2);
1、第一种是在HTML中加PHP。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<title>Hello World</title>
</head>
<body>
<?php
echo "Hello world!这是正文";
?>
</body>
</html>
2、第二种用echo输出HTML。因为HTML有的元素中有双引号,所以用echo输出的内容用单引号括起来,避免出错,也省了转义这一步。比如这样的代码:
<?php
if(!$_POST){
echo ‘<form action="" method="post">
服务器地址:<input type="text" name="host" value="localhost" /><br />
数据库账号:<input type="text" name="user" value="" /><br />
数据库密码:<input type="password" name="pwd" value="" /><br />
指定数据库:<input type="text" name="db" value="test" /><br />
<input type="submit" value="确定"/>
</form>‘;
}
?>
3、第三种就是用(<<<)标记符了,这是在PHP168的模板代码中首次见到的。
<?php
print <<<EOT
<div class="slidecont">{$label[deepblue_mainslide]}</div>
<div class="newcontainter">
<div class="head">{$label[deepblue_mainh1]}</div>
<div class="cont" id="Tab1">{$label[deepblue_maint1]}</div>
<div class="cont" id="Tab2">{$label[deepblue_maint2]}</div>
</div>
<a href="$rs[url]" title="$rs[descrip]" target="_blank">$rs[name]</a>
EOT;
?>
不管你的变量是什么类型的 在按位与、或、异或这些操作中都统一转换为2进制
是啊,所以定义的时候只能定义1、2、4、8等2的N次幂的数才能确保转换成二进制的时候只有一个1,其他都是0,我的意思是有没有像定义八进制(前面加0)或十六进制(前面加x0)那样定义的时候就定义二进制呢?
没有,不过可用bindec函数来转换。比如这样$a = bindec(‘11111’);$b = bindec(’10100‘);这样。注意单引号
<? ?>是短标签<?php ?>是长标签在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后可以使用PHP的短标签:<? ?>同时,只有开启这个才可以使用 <?= 以代替 <? echo 。在CodeIgniter的视频教程中就是用的这种方式。但是这个短标签是不推荐的,使用<?php ?>才是规范的方法。只是因为这种短标签使用的时间比较长,这种特性才被保存了下来。
在类里面的时候,$this->func()和self::func()没什么区别。在外部的时候,->必须是实例化后的对象使用; 而::可以是未实例化的类名直接调用。举个例子:class Mytest{ function ccc($str){ echo $str; }}Mytest::ccc("123456");$object = new Mytest();$object->ccc("123456");
是不是说实例化的类不能使用::?而未实例的类可不可以使用->呢?
你用我的例子,分别试一下Mytest->ccc("->")和$object::ccc("::")就知道答案了。(都会报错)
谢谢~刚刚我也在http://www.php.net/manual/zh/language.oop5.static.php里看到明确的说明了: 静态属性不可以由对象通过->操作符来访问。 用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。