php学习笔记总结 篇⼀:篇⼀:php学习总结
调试/*………*/ //…….#..........
插⼊时考虑清楚字段类型避免插⼊后出现缺值,乱码 @ 屏蔽错误or die 条件显⽰ 以前学习php类的总结:
1.php中不能重载,但是能⽤⼦类覆盖⽗类的⽅法名称来实现新的重载 1.1 在⼦类中调⽤⽗类的覆盖部分可以使⽤ ⽗类名称::⽅法名称();
2.final 只能定义类和⽅法,不能使⽤final定义成员属性,因为final是常量的意思,在php⾥定义常量使⽤的是define函数
2.1 final关键字标记的类不能被继承 2.2 final关键字标记的⽅法不能被⼦类重写
3.const是⼀个定义常量的关键字,在php中定义常量使⽤的是define()函数,但是在类⾥定义常量使⽤的是“const” 这个关键字 3.1在程序中不能修改它的值。
3.2 访问const 修饰的成员属性要使⽤类名,在本类的⽅法⾥使⽤“self”关键字,但不使⽤\"$\"符号,也不能使⽤对象来访问。
4.static关键字可以描述类中的成员属性和成员⽅法 4.1 static 的成员属于类,⽽不属于任何对象,
4.2 static的成员是在类第⼀次被加载的时候分配的空间,其他类⽆法访问的,只对类的实例共享,能⼀定程度对类该成员形成保护
4.3 静态成员放到了“初始化静态段”,在类第⼀次加载的时候放⼊的,可以让堆内存⾥的每个对象共享。所以在静态⽅法⾥,可以使⽤这个⽅法所在的类的“类名”,也可以使⽤“self”来访问其他静态成员。“self”代表这个静态⽅法所在的类。
4.3.1 在类⾥的静态⽅法是不能访问类的⾮静态成员的。
4.3.2 在类的⾮静态⽅法⾥可以访问静态成员:”self:成员属性“;
4.4类的静态变量,⾮常类似全局变量,能够被所有类的实例共享,类的静态⽅法也是⼀样,类似于全局函数。
4.5 在类内函数访问静态变量时前⾯加self::静态函数
4.6 静态变量可以在类外直接访问,访问⽅法是类名::静态变量 4.7 静态函数可以在类外直接访问,访问⽅式是类名::静态函数 4.8 在类内静态函数访问另⼀个静态函数时使⽤ 类名::静态函数名 4.8.1 静态函数在类内访问静态变量时,访问⽅式是类名::静态变量
4.8.2 静态函数在类内访问静态变量时,访问⽅式除了是类名::静态变量外,还可以使⽤self::静态变量
4.9 在类内静态函数访问另⼀个静态函数时除了使⽤ 类名::静态函数名外,还可以使⽤self::静态函数名,也可以直接调⽤静态函数 4.10 静态函数内不能访问⾮静态变量
4.11 在类内静态函数不能使⽤$this->⾮静态函数名访问⾮静态函数,可以使⽤self::⾮静态函数名 4.12
5.类⾥的”$this“,在php⾥⾯提供了⼀个本对象的引⽤$this,每个对象⾥⾯都有⼀个对象的引⽤$this来代表这个对象,完成对象内部成员的调⽤。 5.1 $this 就是对象内部代表这个对象的引⽤。
6.类⾥\"self\和$this相似,只不过self是代表这个静态⽅法所在的类,所以在静态⽅法⾥,可以使⽤这个⽅法所在的类的”类名“,也可以使⽤\"self\"来访问其他的静态成员,通常使⽤后者”self::成员属性“。
7.类⾥”__“开头的函数名
7.1类⾥”__“开头的函数名都是在某⼀时刻不同情况下⾃动调⽤执⾏的⽅法。
7.2__toString()⽅法也是⾃动被调⽤,是直接输出对象引⽤时⾃动调⽤的。⽐如\"$p = newPerson()\",直接⽤echo输出$p会产⽣错误,如果在类⾥定义了__toString()⽅法,再⽤echo直接输出对象引⽤的`时候就不会产⽣错误了 8.对象串⾏化
8.1 __sleep()⽅法,在对象串⾏化的时候,会调⽤⼀个__sleep()⽅法来完成⼀些睡前的事情,__sleep()函数不接受任何参数,但返回⼀个数组,其中包含需要串⾏化的属性。未被包含的属性降在串⾏化时被忽略,如果没有__sleep()⽅法,php将保存所以属性.
8.2 __wakeup()⽅法,在重新醒来时,即由⼆进制串重新组成⼀个对象的时候,则会⾃动调⽤__wakeup(),做⼀些对象醒来就要做的动作。
8.3 有时你可能需要⼀个对象在反串⾏化后⽴即执⾏. 为了这样的⽬的,PHP会⾃动寻找__sleep和__wakeup⽅法.
9. protected 成员能被同个类中的所有⽅法和继承出的类的中所有⽅法访问到,不能被⽗类的实例直接访问。protected and public 可以动态绑定
10. private ⼤部分private属性仍然可以被外部代码共享. 解决⽅法是⽤⼀对public⽅法,⼀个是get(获取属性的值),另⼀个是set(设置属性的值).
10.1 private 不可以动态绑定。Private成员只存在于它们所在的类内部. 不像public和protected成员那样,PHP模拟静态绑定.
10.2 什么时候⽤到private?private成员只有当你不想让⼦类继承改变或特殊化⽗类的⾏为时才⽤到,这种情况⽐你想像的要少, 通常来说,⼀个好的对象分层结构应当允许绝⼤多数功能被⼦类特殊化,改进,或改变—这是⾯向对象编程的基础之⼀。⼀定的情况下需要private⽅法或变量,例如当你确信你不想允许⼦类改变⽗类中的某个特定的部份。
11.抽象类:抽象⽅法是就像⼦类中⼀般的⽅法的占位符(占个地⽅但不起作⽤),它与⼀般⽅法不同—没有任何代码. 如果类中存在⼀个或更多抽象⽅法, 那么这个类就成了抽象类. 你不能实例化抽象类. 你必须继承它们,然后实例化⼦类. 你也可以把抽象类看成是⼦类的⼀个模板.
如果你覆写所有的抽象⽅法, ⼦类就变成⼀个普通的类. 如果没有覆写所有⽅法, ⼦类仍是抽象的. 如果⼀个类中中包含有抽象⽅法(哪怕只有⼀个), 你必须声明这个类是抽象的, 在class关键字前加上abstract. 声明抽象⽅法的语法与声明⼀般⽅法不同. 抽象⽅法的没有像⼀般⽅法那样包含在⼤括号{}中的主体部份,并⽤分号;来结束.
12.接⼝:如果你建⽴了⼀个只有抽象⽅法的类,你就定义了⼀个接⼝(interface). 为了说明这种情况,PHP中有interface 和implements关键字. 你可以⽤interface来代替抽象类, ⽤implements来代替extends来说明你的类定义或使⽤⼀个接⼝. 例如, 你可以写⼀个myClass implements myIterface. 这两种⽅法可以依个⼈偏爱来选择.
12.1 如果接⼝中出现⾮抽象⽅法.会报错
12.2 接⼝中的⽅法默认是public 型的.其它类型的修饰符,不能修饰接⼝中的抽象⽅法. 12.3 即使接⼝中所有的⽅法都是抽象⽅法,也不能使⽤ abstract 修饰.也不能⽤final 12.4 即使接⼝中所有的⽅法都是抽象⽅法,在接⼝中,可以声明静态⽅法. 12.5 在接⼝中可以有常量,e.g.:
interface User{
const MAX_GRADE = 99; function getName(); function setName($_name); } ?>
13.Namespace关键字给⼀块代码命名. 在这个代码块外部,脚本必须⽤操作符::加上命名空间的名称来引⽤这个代码块. 引⽤静态的类成员也是⽤相同的⽅法. 在命名空间内代码不需要声明命名空间, 它本⾝就是默认的. 这种⽅法⽐添加前缀的⽅法好. 你的代码可由此变得更加紧凑和可读.
你可能想知道是否可以建⽴分层的(嵌套的)命名空间. 答案是不可以. 但你可以在命名空间名称后加上冒号, 你可以再次调⽤在名称中不包含冒号的变量,函数和类. 命名空间允许存在冒号,只要不是第⼀个字符和最后⼀个字符或接着另⼀个冒号. 命名空间的名称中的冒号对于PHP来说没有任何意义, 但如果你⽤他们来区分逻辑上的区块, 他们可以很好地说明你的代码中的⽗⼦(parent-child)关系. 14. __toString()打印对象会调⽤它的__toString⽅法. 15.不能实例化的类 //
//当__construct()为public时可以实例化 class A{
private function __construct(){} }
$a = new A();//fail ?> 15.1
//static的⽅法留给外部访问. class A{
private function __construct(){} static function getClassA(){
return \"这⾥是后门,可以通过这⾥进⼊类内部..\"; } }
echo A::getClassA(); ?> 15.2
//不能⽤new实例化的类. //static的⽅法留给外部访问. //在⽅法内部返回实例. class A{
private function __construct(){
echo \"this is construction \"; }
static function getClassA(){ $a = new A(); return $a; } }
// 看(转 载于:www.zaIdian.cOM 在 点 ⽹)到这⾥确实返回的是 A 的实例.但不是同⼀个对象. $a1 = A::getClassA(); $a2 = A::getClassA();
echo \"$a1 的类是 \".get_class($a1).\" , $a2 是 \".get_class($a1); if($a1 === $a2){ echo \"
$a1 $a2 指向同⼀对象.\"; }else{ echo \"
$a1 $a2 不是⼀个对象.\"; }
//this is construction //this is construction 篇⼆:篇⼆:php学习总结
$_GET[string] 的介绍,Isset() 和empty()的介绍,数据库数据类型, 1.$_GET[string]的介绍 2.$_GET[string]
他和$_POST 的区别在于,当form method=“get”的时候,⽤来传值,
点击下submit后,URL转到了接受值的php页⾯。但是URL 不是这个页⾯的--1.php。⽽是⾃动⽣成的URL。
显⽰的是下⾯的URL:php?控件名(myname是⽂本框的控件名)=⽤户输⼊的值。 所以说⽤这个不安全。 3.Isset() 和empty()的区别
Isset()检查变量值是不是设⽴了。 Check the variable is set and exists.
Empty()检查变量值是不是空。 Check if the variable has contents.
对于empty(),空有7种可能,Null,0,‘’(空字符串),array(),false,遇到出现上⾯的7种情况返回true。
两个返回的都是布尔值。
⼀般情况下⽤empty()检查表单中户输⼊的是否是空值。 ⽤if(!Empty($var))检查; 。 \"0\ primary key 主键
4. MYSQL 命令:create table
命令:注意 column name column type中间没有逗号,只是空格。 看下格式
问题:Cookie 的⽤法 已经试过
5. Setcookie()⽤于服务端在客户端创建cookie。 ⾥⾯的两个值是必须的。Name和value。字符串。 我⾃⼰弄的cookie。Setcookie(‘username’,‘admin’); 在IE9 中按f12 进⼊开发者⼯具中看缓存的cookie信息。 6. Cookie 的默认时间是当你关掉浏览器时就消失。 可以⽤时间戳time()+秒表⽰时间。如:time()
+(7*24*30*60)表⽰7天存在。 读取cookie。⽤$_cookie[]读取。⽅括号⾥⾯是string 的cookie名字。 例⼦:
7. mysql 数据类型:⽤于数据库中的table下的数据的创建 8.
注意下:char()和 varchar() 的区别: Char(2)只能存⼀个字符。⽽且⼀定是2个。 Varchar(60)表⽰能存60个字符。不⼀定是60个。 ⼀般⽤这种。 Date ,⽇期格式 time,时间格式
datetime表⽰⽇期和时间格式。 Dec()表⽰:DEC(m,n)
M表⽰总的位数,n表⽰⼩数点后的位数。
m is the total number of digits and n is the number of digits after the decimal point. Say, you want
to store some numbers like the format 9999.9099999. Here the value of m is 11 and that of n is 7. DATE - A date in YYYY-MM-DD format, 例如: 1973-12-30.
DATETIME -in YYYY-MM-DD HH:MM:SS 1973-12-30 15:30:00. TIMESTAMP - This looks likethe previous DATETIME format, only without the hyphens between numbers; 3:30 in the afternoon onDecember 30th, 1973 would be stored as 19731230153000 ( YYYYMMDDHHMMSS ). TIME - Stores the time in HH:MM:SS format.
YEAR(M) - If the length is specified as 4, YEAR can be 1901 to 2155. The default length is 4. 问题:If.。。Elseif。。。Else
else ifallows us to keep evaluating using if statements as many times as needed. 可以把elseif看做是另外⼀个if。
Use the if....elseif...else statement to select one of several blocks of code to be executed. Syntax 1 if (condition)
23code to be executed if condition is true; 4
5 elseif (condition) 6
7code to be executed if condition is true; 8 9 else 10
11code to be executed if condition is false; 问题: php连接mysql() 回答:四个函数:
mysql_connect(),mysql_select_db(),mysql_query(),mysql_close(). 相关语法: mysql_connect(),连接服务器。
resource mysql_connect(string $server,string$username, string$password). 返回值:指定服务器的link identifier。或者未成功就是false。 然后⽤这个连接mysql中的数据库
bool mysql_select_db( string $database_name [, resource $link_identifier = NULL ] .
Mysql_select_db() ⽤于连接mysql服务器上的数据库。下⾯的mysql_query()⽤来在这个数据库中执⾏。前⾯$a=Mysql_select_db()错误。 mysql_query()语法:resource mysql_query( string $query [,resource $link_identifier = NULL ] ) ⽤于给数据库发送命令。返回resource,是个结 篇三:篇三:PHP学习总结的⼀些经验
其实我也是⼀样很新的新⼿,上PHP100学习视频并在论坛⾥学习其实也就是⼀个⽉前的事.虽然早在8⽉份花过⼀个星期看完w3school的PHP教 程,了解了许多PHP知识.但始终是缺乏⼀个与众多朋友学习和交流的平台,所以⼀下⼦在⼏周后⼜把PHP⼜忘得七七⼋⼋了,有幸在10⽉尾了解到了 PHP100视频和论坛,不仅可以系统地学习下PHP,更可以和很多朋友⼀起学习成长这更是件好事.
在php100视频中学到了许多,⽽ 论坛中看帖和回帖也更让我巩固了学习的知识并让我学到了很多,这不仅不会让我⼜把PHP知识快速忘记(因为⼯作中⽤是ASP,⽽PHP不会在⼯作中⽤,所 以忘得快),反⽽在取得进步的同时,我也能帮助⼀些⼈,这也是⼀样是学习胜利的过程,我喜欢并享受其中. 以下是我上论坛以来的回复总结,将不断持续总结.希望有利于与我⼀样的新⼿⼀起成长. ⾸先来个,题前语:
任何的学习,都需要⾃信,再新的新⼿也应该抛弃⼼中的恐惧,有时关键在于你⼼平下来,踏⼊学习后,你将慢慢化开迷惑,获得信⼼,赢取⾃信!让我们共同进步. ---------- ========== Undefined index问题
是运⾏的时候出现类似:Notice: Undefined index: action in D:wampwwwadd.php on line 3 的 原因:
可详参见此帖:http://bbs.php100.com/read.php?tid=15843&page=1#138857 是 php 配置的事情
这个错误是因为 php 页⾯中的变量没有初始化⽽导致的! 可以通过设置PHP.INI搞好,
也可以在变量前⾯ 加上⼀个 @ 就可以解决这个地⽅的问题了! 如这⾥指⽰第三⾏
Notice: Undefined index: action in D:wampwwwadd.php on line 3 那么找到第3⾏加上@ if (@$_GET['action']=='save') {
你再运⾏下,发现还有提⽰,但⾏号变了,那么你再在⾏号对应的未初始化的变量前加@即可解决 ⼀劳永逸的办法是在 php.ini 中的 error配置下错误显⽰⽅式 估计你⾥边的error_reporting=E_ALL 把error_reporting这个设为
error_reporting = E_ALL & ~E_NOTICE 别忘了改动后,重启下APCHE服务器,才会⽣效 这样,以后就不⽤在这种情况下加@了 -
具体参考下这个设置下http://edu.codepub.com/2009/0617/6463.php ---------- ==========
遇到页⾯明确提⽰你错误的,并有显⽰如何错的,建议先把语句复制部分重点词句或全部语句到百度或
google,更快速让在你排查错误找到⽅法.其实这也是⼀种⾼效有益的学习⽅法,毕竟在⼯作中,遇到些没
遇过的新问题,有时都需要借助⽹上的资源给⾃⼰灵感和助⼒,本⼈就⼀天不下⼏⼗次⽤百度搜索. 如程序中遇到诸如含提⽰: 显⽰的错误为:
Parse error: syntax error, unexpected $end in D:wampwww estlist.php on line 21
那么你就可以把 syntax error, unexpected $end 作为关键词到百度搜索,那么你即刻可以得到助⼒甚
⾄答案.以上那句举例的错误是因为:短标签没有打开.解决⽅法是打开php.ini把short_open_tag短标签
打开,重启服务即可 ---------- ==========
提⽰的时候,有时顺便把代码帖上帖⼦是必要的,这样才能快速地在别⼈的帮助下问题得到解决 ---------- ==========
对单引号和双引号有迷惑,⼤家可以看这篇⽂章解下惑: ---------- ==========
在调试程序时,经常要⽤到echo 你的sql语句来,检查传值后,sql变成了什么样的情况,以便排查错误. ---------- ========== 向数据库表插⼊数据
INSERT INTO 语句⽤于向数据库表添加新纪录。 语法
INSERT INTO table_name VALUES (value1, value2,....)--此种情况是需要按你表中所有字段的顺 序全部value填上!
您还可以规定希望在其中插⼊数据的列:
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....) --张⽼师明确建 议⽤此种⽅法! ---------- ==========
有⼈疑惑,$_POST或$GET取得时的引号问题:其实是要不要引号,单引号或双引号都是没有问题的. 如, $_POST[name]和$_POST['name']和$_POST[\"name\"]都是在windows下⼀样的,在linux下情况具体没
⽤过,不知道,还望⾼⼿告知. ---------- ==========
针对多数⼈的留⾔板课程中许多问题(如, into存不进数据问题)的总结: 1.检查你数据库表的结构是否正确,如id是否设为⾃增 2. into语句是否正确,如单词是否正确, into ... values ...
3.是否将`(反斜点,在1键前)号和'(引号)是否使⽤位置正确,正确的⽅法是:`应该放在表和字段边,⽽' 是放在字符串型(或者说是⾮数字型)的值边上 4.检查你的各语句,是否在结尾将分号(;)正确结束
5.检查你的submit表单项的name值是否你判断的取值,如时,你的判断是否提交应是 if ($_POST[submit]){...} ;当你的是时,你的判断是否提交应是 if ($_POST [othername]){...}
6.检查你的$_POST是否⼤写,当你写成$_post是不⾏的,因为$_GET,$_POST等,都是PHP系统环境的硬性⽤ 法
7.⽤echo 输出你的sql检查传值情况 8.检查你的短标签是否打开 9.注意你的method是get还是post
10.检查你的表单相关单词或引号是否书写正确.很多莫名其妙的问题,多是细节问题.要⼩⼼查对才能看 出来. ---------- sql语句中表名和字段名在windows的情况下是可以不加⼩斜点(键盘左上⾓1键前的那个点键)的,但
听说
在linux中不加会引出些问题,兼容的写法是有⼩斜点. 如:windows下:
$sql=\"select * from table \" 和
$sql=\"select * from `table` \" 是效果⼀样的 再次重点提⽰是:
`(反斜点,在1键前)号和'(引号)使⽤位置,正确的⽅法是:`应该放在表和字段边,⽽'是放在字符串型(或 者说是⾮数字型)的值边 ---------- ==========
php100第⼗三讲的page.PHP中的翻页显⽰信息有问题的解决⽅法:
因为页⾯没有取值到URL值的page,所以在函数内的page会⼀直是1,所以会⼀直是第1页的数据 解决⽅法,就是在调⽤函数前把page取得就好了!函数⾥会把取到的page值作为全局变量传⼊函数使⽤的 了!
include(\"conn.php\");
$nump=mysql_query(\"SELECT * FROM `test`\"); $total=mysql_num_rows($nump);
//调⽤pageft(),每页显⽰10条信息(使⽤默认的20时,可以省略此参数),使⽤本页URL(默认,所
以省略掉)。
$page=$_GET[page]; //------------------------------在这⾥加⼊这⾏就OK了! _PAGEFT($total,5); echo $pagenav;
$query=mysql_query(\"SELECT * FROM `test` limit $firstcount,$displaypg \");//---见下⾯while($row=mysql_fetch_array($query)){ echo \"
\".$row[name].\" | \".$row[sex]; } 以上的
调试⽅法,其实你只要学下张⽼师把sql语句输出来看下,你就知道是怎么回事了! echo $sql=\"SELECT * FROM `test` limit $firstcount,$displaypg \"; $result=mysql_query($sql); ---------- ==========
分页有问题的朋友,不妨看下如下:
关于分页,这有⼀篇论坛朋友的学习⼼得,学习下,你也许有所得: 另有⼀篇本⼈转发上去的分页讲解: ----------
因篇幅问题不能全部显示,请点此查看更多更全内容