您的当前位置:首页正文

php学习笔记总结

2022-02-21 来源:星星旅游
php学习笔记总结

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的⽅法留给外部访问.    private function __construct(){}  static function getClassA(){

  return \"这⾥是后门,可以通过这⾥进⼊类内部..\";  }  }

  echo A::getClassA();  ?>  15.2

  //不能⽤new实例化的类.  //static的⽅法留给外部访问.  //在⽅法内部返回实例.    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);  ----------  ==========

  分页有问题的朋友,不妨看下如下:

  关于分页,这有⼀篇论坛朋友的学习⼼得,学习下,你也许有所得:  另有⼀篇本⼈转发上去的分页讲解:  ----------

因篇幅问题不能全部显示,请点此查看更多更全内容