分类 PHP学习 下的文章

学习PHP,遇到这么个问题
[php]
class MyPc{
    static public $name = "我的电脑";
    function Show(){
        echo $this->name."正在开机……";
    }
}
[/php]
正常情况下:
[php]
$p = new MyPc();
$p->Show();
[/php]
这样是没问题的,可是这样却也可以调用到Show方法
[php]
MyPc::Show();
[/php]
PHP并没有报错,由此,便产生了疑问。
大家都知道静态类可以用类名.方法名的方式调用,在PHP中,对于::的解释也都是调用类中的静态成员。但是这个Show方法并没有static关键字,也就是说它并不是“显式”声明的静态方法。请注意,这个“显示”。在.NET中,如果没有static关键字的话,类名是无法.出来这个方法的,PHP中却似乎没有这个限制,这样使用后,似乎自动就将Show方法作为了静态方法来调用。如此一来,如果不考虑属性问题,整个类都是方法,那么我有何必去new这个类?
在PHP100的论坛问了半天,也没有特别准确的答案,姑且只能如此认为:php自动转化为静态方法,不用你去new对象而开辟新的内存地址,直接就可以使用该类的方法,该方法也将作为该类的一个成员属性而存在,不因为new对象而占用单独的内存。
既然这样,可能带来的隐患是:如果将变量$name的static去掉便会报错。方法里面的属性必须也都是静态的才能调用。还有就是这个对不是静态的属性是无法调用到的,比如去掉$name的static后,MyPc::$name是不行的。
好处当然也显而易见,能够自动转化为静态方法也就减少了内存的损耗。

 

 

转自 http://blog.csdn.net/wusuopubupt/article/details/8793372

用通俗的话来说,PHP中的类是一个大的范围,例如人,而对象则代表的是个体比如你我他。

类的创建:

[php]
class class_name//class是关键字,class_name是要定义类的名字
{
//用关键字var定义类的属性,属性的类型支持PHP的所有数据类型,也可以是一个对象
var $var_1;
var $var_2;

var $var_n;
//用关键字function定义类的方法
function method_1(…){…}
function method_2(…){…}

function method_n(…){…}
}
[/php]

对象的创建

[php]
$object_name=new class_name //object_name是对象的名称
[/php]

好处:

使用类与对象能更好得对代码进行维护,使得码代码的效率得到提高,并且有助于提高代码的集成度,

下面的例子一般来说应该有助于理解前、后递增和表达式:

[php]
<?php
function double ( $i )
{
return $i * 2 ;
}
$b = $a = 5 ; /* 这个不需要问 */
$c = $a ++; /* 变量c的值变成变量a的值,然后变量a自增1,后递增*/
$e = $d = ++ $b ; /* 前递增 变量d和e的值等于变量b加1 */

/* 此时,变量e和d都等于6 */

$f = double ( $d ++); /* 根据自定义函数double 因为是后递增,
变量f等于变量d的值6*2输出12 */
$g = double (++ $e ); /* 根据自定义函数double 因为是前递增,
变量g等于变量d的值7*2输出14*/
$h = $g += 10 ; /* 首先变量g加10在赋予变量g,
此时变量g等于24,然后再赋予变量h,变量h等于24 */
?>
[/php]

在PHP中,需要动态的显示给用户,代码就必须要根据不同的用户来进行判断判断。
1.IF ELSE语句

[php]
if (expr) //expr是一个判断条件,输出值应为布尔值
statement

//
if else 语句中只要依次满足条件条件执行了,就不继续执行以下语句,即使以下语句中已经有相匹配的条件
if(expr1){
}elseif(expr2){
statement1
}elseif(expr3){
statement2
}elseif(expr4){
statement3
}else{ //当任何条件都不满足的时候输出statement4
statement4
}
//例如其下是一个根据当前时间输出相应问候语的例子
$hour=date("H");//申明变量的值
if($hour < 6){
echo "凌晨好";
}elseif($hour < 11){
echo "早上好";
}elseif($hour < 13){
echo "中午好";
}elseif($hour < 19){
echo "下午好";
else{
echo "晚上好"
}

[/php]

2.SWITCH选择语句

[php]
//表达式一般为变量
switch(表达式){
case 值1
......
break;//switch语句与elseif语句不一样,如果不加break则继续执行下面的case.
case 值2:
......
break;
default://所有的case语句都与表达式里面的不一样 执行default,相似else{}.
......
}

//下面是关于判断不同会员的示例
$user_group = 1;
switch{
case 1:
echo "你是铁牌会员";
break;
case 2:
echo "你是铜牌会员";
break;
case 3:
echo "你是金牌会员";
break;
default:
echo "你是免费会员";
}
[/php]

3.WHILE循环

[php]
while(条件){ //只要条件为真就不断循环下去
内容
}

//下面是用while来写一个99乘法表的例子

$i=1;
while($i<=9){
$j=1;
while($j<=$i){
echo $j.'x'.$i.'='.$i*$j."\t";
$j++;
}
echo "
";
$i++;
}

[/php]
4.DO..WHILE语句
[php]
//do...while语句特点:先执行一句然后再判断
$i=5;
do{
echo $i
}while($i>10)//判断条件为fause 输出 5

[/php]

5.FOR循环
[php]
/*
当你明确知道循环次数的时候,就可以用for循环,经常用在已经了解循环次数的情况
在for循环中一次将初始值,表达式,增量定义,一次性表达出来的,简单清晰.
for循环支持嵌套
*/

for(表达式初始值,判断语句,增量){
代码段

//下面是一个for循环写的99乘法表
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
echo $j.'X'.$i.'='.$j*$i.'\t';
}
echo "<br />";
}
[/php]

6.break与continue

[php]
//break
$i=0;
while ($i < 7) {
$i++;
if ($i==5) {
break;//跳出目前执行的循环,并不再继续执行循环了。
}
echo $i;//输出为1234
}

//continue
$i=0;
while ($i < 7) {
$i++;
if ($i==5) {
continue;//立即停止目前执行循环,并回到循环的条件判断处,继续下一个循环。
}
echo $i;//输出为123467
}
[/php]

由于我有过一些其他语言的基础,所以在我的php笔记中通常只会记录一些基础知识学习中比较容易忽略的点,与其他语言不太相同的点。并不是知识点全面的记载。

一、变量

整型:

[php]
$num = 23;

$num1 = 023;

$num2 = 0x23;

echo $num,$num1,$num2;
[/php]

第一个输出很显然是23,第二个就是比较容易出错的点了,在php中0+数字的形式表示的是八进制数,所以:

23 十进制
023 八进制
0x23 十六进制

在echo的时候会自动将整型转换为十进制输出,所以以上的代码输出分别为23,19,35。

布尔型:

[php]
$bool = true;
$bool1 = false;

echo '这是echo输出';
echo $bool,$bool1,'<br />';

echo '这是print输出';
print($bool);
print($bool1);
echo '<br />';

echo '这是print_r输出';
print_r($bool);
print_r($bool1);
echo '<br />';

echo '这是var_dump输出';
var_dump($bool);
var_dump($bool1);
[/php]

布尔值在输出的时候会自动转换格式
true变为'1',false为""。

Null型:

[php]$n = null;
$m;
$l = 3;
unset ($l);
echo $n;
echo $m;
echo $l;[/php]

只有变量被赋予null时才是null类型

如果变量只创建,没有赋值,或者unset的值
echo时会报出Notice: Undefined variable: