php学习笔记总结

2021-10-13

  篇一: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",self 和$this相似,只不过self是代表这个静态方法所在的类,所以在静态方法里,可以使用这个方法所在的类的”类名“,也可以使用"self"来访问其他的静态成员,通常使用后者”self::成员属性“。

  7.类里”__“开头的函数名

  7.1类里”__“开头的函数名都是在某一时刻不同情况下自动调用执行的方法。

  7.2__toString方法也是自动被调用,是直接输出对象引用时自动调用的。比如"$p = new Person",直接用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;

  }

  }

  // 看(转 载于: 在 点 网)到这里确实返回的是 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",0.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 like the previous DATETIME format, only without the hyphens between numbers; 3:30 in the afternoon on December 30th, 1973 would be stored as 000 ( 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 的

  原因:

  可详参见此帖:;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服务器,才会生效

  这样,以后就不用在这种情况下加@了

  -

  具体参考下这个设置下

  ----------

  ==========

  遇到页面明确提示你错误的,并有显示如何错的,建议先把语句复制部分重点词句或全部语句到百度或

  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值是否你判断的取值,如<input type="submit" name="submit"

  value="提交">时,你的判断是否提交应是 if ($_POST[submit]){...} ;当你的是<input

  type="submit" name="othername" value="提交">时,你的判断是否提交应是 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

  ; //------------------------------在这里加入这行就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);

  ----------

  ==========

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

  关于分页,这有一篇论坛朋友的学习心得,学习下,你也许有所得:

  另有一篇本人转发上去的分页讲解:

  ----------