模板中遇到的问题

  1. 当进行外部跳转的时候,一定呀加上http://,不然系统会以为你要访问的是内部文件
  2. 当子类继承父类的时候,在子类被实例化的时候,相当于父类也实例化了,父类的构造方法 也会实现。
  3. Log.class.php一般是用来放日志的
  4. date(‘Y-m-d H:m:s’) 里面的引号别忘了
  5. defined(“常量名”)检测常量是否存在
  6. error_reporting(0)表示屏蔽所有错误
  7. 在把要引入的文件组合成一个字符串储存的时候,发现,要去掉前面5个字母和最后面4字母,才能把每个文件的<?php ?>标签去掉,strsub(file_get_contents(“文件路径”),5,-4)
  8. 在框架的非debug模式下,将屏蔽掉所有的错误。但是,这只是屏蔽掉错误,只是不显示。因为有错误,所以原来的正确的显示也不会显示。
  9. print_r($arr,true),里面的true表示可以把这个输出的值赋给一个变量,而为false则表示不能赋值给别的变量,只是单纯的打印出来。
  10. border-radius:元素添加圆角的边框:
  11. headers_sent():用于查询页面的header()是否已经发送了。在框架的跳转函数go()中,为了避免重复发送头部信息,在!headers_sent()的情况下用header()进行页面跳转。
  12. header()用于页面跳转:第一种:header(“Location:{目标页面的url}”) 第二种:header(“Refresh:{刷新页面的时间};url={要跳转页面的url}”)
  13. <meta http-equiv='Refresh' content='{$time};URL={$url}'>实现页面跳转
  14. die({提示信息});可以用来提示页面跳转的信息。而且本页剩下的代码就不执行了。也可以在halt()函数中用到,一旦调用了halt()函数,说明框架出问题了,直接停止。
  15. debug_backtrace()函数,用来追踪代码的调用,在模块的halt()函数里被用到。
  16. ob_start();开启缓冲区 输出的信息都不会显示在页面上,而是直接被载入缓冲区了,ob_get_clean()则是返回所有被堵在缓冲区的东西。
  17. htmlspacialchars({变量})函数,把变量转化成纯文本,使得里面的全部标签失效。
  18. 在网页上画一条线 <hr>
  19. nl2br() 函数在字符串中的每个新行(\n)之前插入 HTML 换行符(<br><br />)。
    19.get_defined_constants({参数});这个函数用于获得所有已经定义的常量(包括系统常量和用户自定义常量),当参数为空时,表示以以一维数组的方式获得所有常量。当参数为true时,表示以二维数组的方式获得常量(以常量的属性分类)。这时候就可以通过$const=get_defined_constants(true) echo $const['user']的方式获得用户自定义常量。
  20. strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。用于取文件后缀 strrchr(“{文件名}”,”.”),返回.到结尾的字符。
  21. extract() 函数从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值
  22. 在类中的变量,通过$this->调用时,变量不用加$
  23. form表单提交的时候 action=” “,为空表示提交到当前页面

  24. <script type="text/javascript" src="<?php echo __PUBLIC__?>/Js
    /jquery-3.2.1.min.js" ></script>
  25. 当表单的action为javascript:;时,就会使表单提交不了,就是说明我这个跳转归javascript管理了,你别随便跳。
  26. 当在jQuery中用ajax异步的时候,比方说绑定一个form的submit事件,发送一个ajax请求,那么当表单点击提交的时候,可以在F12里面网络里面抓到的包里面显示出相应消息,在里面查看$_SERVER[]数组时可以看到[HTTP_X_REQUESTED_WITH] => XMLHttpRequest,表明是ajax异步请求,那么在定义框架常量的时候,只要检测$_SERVER['HTTP_X_REQUESTED_WITH']是否存在,且等于XMLHttpRequest,若是,则说明使用了异步ajax,那么框架里的IS_AJAX==true;
  27. require_once :当文件中已经引入了就不再引入,如果没有引入,就把他引入过来。
  28. 框架目录下的Extends文件夹,代表项目框架本身的扩展,里面有Tool文件夹(用于放工具类,比方说验证码)Org文件夹(存放第三方类库)
  29. 所有框架中实例化类时,未找到类,都会触发 _autoload()函数,让这个自动载入函数去载入
  30. spl_autoload_register(array(__CLASS__,'_autoload'));,注册自动载入函数
  31. php 的switch:switch({参数}),这个参数直接是true,然后case时,当case的是true条件的时候,便执行之。用在_autoload()函数里面,实现对不同的类的载入(控制器类,第三方库类),从而实现动态加载。(switch函数还可以这样用,开眼了~~)。
  32. class_exists({类的名字}) :判断类是否存在,自动调用_autoload();
  33. method_exists({类的名字},{方法名}):判断类中的某个方法是否存在
  34. 错误拦截:set_error_handler(array(__CLASS__,'error'));发生错误时,直接拦截到error()函数里(类似于_autoload()),一有错误就调用这个函数。并把错误信息当作参数传给这个函数。public static function error($errno,$error,$file,$line),参数分别是
    $errno 错误类型/等级,$error 错误信息 ,$file 错误的文件 ,$line 错误行号
  35. 致命性错误:就是你乱敲,一点都没有符合常规;常规性错误:你是会桥代码的只是有时候代码有逻辑,只是有点小毛病比方说文件引入路径错误啊,少写了一点东西啊
  36. 类的私有方法,方法名前面加一个下划线, private function _connect()
  37. 函数中的静态变量: 静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。只要在变量前加上关键字static,该变量就成为静态变量了。 这和类的静态变量很像。主要用在框架里的C()函数里面,把所有配置项都放在C()函数下面的 static $config 静态变量里面,那么想要读取配置项信息就直接从这个静态变量中找就好了,因为他是静态的,不会消失。
  38. 配置项能容要用C()函数来读,因为加载就是C()函数来加载的,肯定是他来读呀。别把配置项和常量搞混了,常量的直接define出来的。KUAIXUEPHP/KUAIXUEPHP.php初始文件里所定义的,而配置文件是在KUAIXUEPHP/Lib/Core?Application.php里面通过C()函数加载的。直接常量名就可以使用了。
  39. 方法中调用静态变量 self::$link;要加$符号。
  40. 在KUAIXUEPHP/Extends/Tool下面创建好数据库连接Model类之后(Model.class.php),我直接在默认控制器下面 $obj =new Model();为什么可以直接new ,因为直接new的时候,找不到类,触发了_autoload()函数,而里面可以分辨控制器类和工具类,当要new的是个工具类的时候就自动的 include KUAIXUEPHP/Extends/Tool/工具类
  41. empty({参数})函数用于判断一个参数是否为空,但要注意当字符串的值为0时,也返回true,在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。换言之,下列代码不会生效: empty(trim($name))。
  42. 在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性则是用 ::(双冒号):self::$property 来访问。更多静态属性与非静态属性的区别参见 Static 关键字
  43. p()函数带圆框框,因为加了css属性
  44. 在数组赋值的时候,若不指名下标,则会从头到尾依次赋值。比方说:$arr=array();$arr[]=1;$arr[]=2;$arr[]=3;此时,数组$arr里面就是1,2,3.
  45. 类的public方法,可以通过类的实例化对象->调用;而private只能通过类自己self::调用
  46. Sql语句拼接的时候,注意前后的空格。还有引号的问题
  47. current({数组}):表示取出数组的第一个元素的值,若数组为二维数组,就是取出0号一维数组,用在数据库模板的find()函数里,用于单独取出一条数据。以一维数组的方式返回数据。一般的all()函数,是以二维数组的形式返回全部数据,用数据时不太方便。
  48. mysqli执行增删查的时候,$link->query($sql),$link->insert_id表示插入数据的id,$link->affected_rows()影响的条数
  49. magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“ ”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
  50. 当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1 magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0在magic_quotes_gpc=On的情况下,
  51. 如果输入的数据有单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
  52. insert into 语句里面 字段名用反引号 ` ,值用单引号 ‘
  53. 当一个函数中有return 的时候,将会结束函数的进程
  54. $_SERVER["QUERY_STRING"] 获取查询 语句,实例中可知,获取的是?后面的值
    $_SERVER["REQUEST_URI"] 获取 http://localhost 后面的值,包括/
    $_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
    $_SERVER["PHP_SELF"] 当前正在执行脚本的文件名
  55. Smarty中,定界符的作用就是,当开启了Smarty时,要在页面上引用Smarty中的变量,比方说在默认index控制器里面,调用Smarty的assign()方法,assign(‘name’,’ZJ’)指定变量,那么在页面上显示变量的时候,就不再是<?php echo $name ?>,而是 左定界符 变量名 右定界符,说白了就像是相当于<?php ?>
  56. Smarty缓存,个人感觉就是当在缓存时间内,我的数据是不会更新的,比方说,我在index默认控制器内设置了$this->assign("time",time()),然后再$this->dispaly(),若是没有启用
  57. 启动Smarty缓存,首先要在config.php文件里设置好’CACHE_ON’=>’true’,$smarty->is_cached($tpl,$_SERVER['REQUEST_URI']);返回的是缓存的状态(是否失效)。若失效,返回false。
  58. 当开启smarty后,在html中引用php变量,就要用smarty定界符包起来了,而不再是<?php ,?>
  59. sunlime格式化代码插件快捷键 ctrl+shift+h;
  60. insert into table_name set field_1=’{value}’ , field_2=’{value}’。注意中间用逗号
  61. 框架里,表单传值,不用指定action=”“,反正是都放到$_POST[]数组里面,用的时候,根据键名获取值就好了
  62. inpu标签加上required=”“属性,表示这个输入框不得为空。
  63. 在登陆时,因为表单的action属性为空,所以当按下提交按钮之后,会刷新页面。这时候就要明白,重新刷新的页面不是简简单单的刷新这个模板页面,而是经过go(__APP__?c=Login)函数过来的那个路径页面,而这个页面上默认先执行的index方法中,先对IS_POST进行了判断,要是没有post传值,说明是第一次加载(模板中输入框有required=”“属性,所以不可能不输入就按提交按钮),要是传值了,对数据进行检验。若不符合条件,跳转到,其实是这样的,IS_POST常量是根据$_SERVER['REQUEST_METHOD']这个参数来决定的,但是这个参数,并不是表示有没有提交post数据,而是表示的是以那种方式提交数据,当他为post时,IS_POST的值就为true,由此可见,这个东西相当于只是检测一下你有没有按下submit按钮而已,所以当通过$this->error("登陆失败")返回并重新刷新页面的时候,当然就IS_POST为false了,然后就重新$this->dispaly()。但是当是点击submit按钮刷新页面时,他是带着数据来的(也可以说是自己刷新自己),这时候IS_POST就为true了,就会对$_POST[]里面的数据进行判断,选择(success/error)。总的来说,就是看跳转到本页面是外部跳转过来刷新页面的(IS_POST=false),还是本页面自己submit刷新自己的(IS_POST=true)。
  64. mysql,重置自动递增uid ALTER TABLE tablename AUTO_INCREMENT = 1 ;
  65. session_unset():清除SESSION变量。session_destroy()清除文件。
  66. $smarty.session.uname。smarty取数据。
  67. 要使得连接在在iframe里面显示,需要指定a 标签的target=”{框架名}”。
  68. smarty引入文件:{ include file="../Common/header.html"}
  69. smarty语法:{foreach from="$data" item="v"} <h2>{$v.name}</h2><h2>{$v.id}</h2>{/foreach},表示从数组$data里面取出其中一个值,赋值为变量v,中间没有逗号。那么在网页里就可以用到其中的变量了。类似于php中的<php foreach($date as $v){><h2><?php echo $v[name];?></h2><?php };?>
  70. 在页面上的javascript代码的注释问题:切记不能直接在<script type="text/javascript"></script>外面直接ctrl+/,这样注释是没有效果的,要在标签里面对实际的内容进行注释,才有效。
  71. 关于a标签的默认target问题:他的默认target=”_self” ,就是关闭掉自己这个窗口,再以本窗口为基础,打开新的窗口。所以在iframe里面的链接打开以后的页面任然是在iframe里面。就是这个效果。其他属性值详细链接<链接>(http://www.w3school.com.cn/tags/att_a_target.asp)
  72. input,隐藏域:。隐藏域,当你要提交的表单有你不想要用户看到的数据时,你就可以把他放到隐藏域之中,就可以跟着表单一起提交出去。美滋滋。
  73. form enctype=”multipart/form-data”:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
  74. 虽然表单有required=”“,属性可以在前端防止提交为空,但是有的浏览器不一定支持这个属性,所以在后台加一步验证是必不可少的。
  75. PHP文件上传:其实就是把数据保存在$_FILES[]数组里面(千万注意里面有个s),每个上传的元素都对应name ,type,size,tmp_name,error五个属性值。也就是通过这五个属性值,对上传的文件进行过滤。上传的文件在脚本结束前,都会存到一个临时的目录下,需要把他copy到上传文件的保存目录下。 $_FILES["file"]["name"] - 被上传文件的名称,$_FILES["file"]["type"] - 被上传文件的类型,$_FILES["file"]["size"] - 被上传文件的大小,以字节计,$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称, $_FILES["file"]["error"] - 由文件上传导致的错误代码。用move_uploaded_file({规定要移动的文件} {规定文件的新位置}) 函数将上传的文件移动到新位置。move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
  76. 神奇。当一个类中不存在某个属性时,要是直接对其赋值,就相当于有了这个属性。比方说在验证ArticleController类里面的add()方法里,调用了ArticleModel模块类里的add_date()方法,这个方法当验证上传文件类型成功时,就把文件上传类放回的结果直接就 在类中使用$this-> 调用一个未定义的属性时,PHP5会自动创建一个属性供使用。
    这个被创建的属性,默认的方法权限是public。$this->error=$upload->geterror(),可是类中没有这个属性,他就直接用了,然后在add()方法里直接把K(‘Article’)->error,赋值到控制类的error()函数里,神奇!原来这样也可以。
  77. 框架里添加外部类:首先把类放到Common/Lib/下面,名字为.class.php,再在配置项里面的’AUTO_LOAD_FILE’这个数组中加入要加载的配置项,因为在Application.class.php里面,就会根据这个配置项,取Common/Lib下面找,把文件引入过来。然后再控制器里面调这个模型,模型里面使用这个外部类。最后看一下这个外部类的API接口,做出相应的设置便可。
  78. 在下拉菜单<select><option value=""></option></select>里面,传值实际上传递的是每个option里面的value属性。
  79. 为什么栏目删除的a标签按钮不直接绑定href=”“等于某个控制器del()操作,为什么要添加js代码href=”javascript:;”?因为我们要给用户一个反悔的机会,(用js的confirm)万一是用户小手一抖不小心点了删除怎么办。做人不能反悔,但是咱们程序要是能写好的话就能够反悔。
  80. Smarty里的if判断:{kx if $oldData.category_cid eq $v.cid}执行相应的操作,设置相应的属性{kx /if} eq表示相等
  81. 注意,当药在textarea标签里显示内容时,比方所我在文章修改页面,要把原来文章的数据放到框里,其他的input标签加个value=”{具体的值}”就好了,(可能是因为input标签没有相应的闭合标签</input>),所以要显示值的话加个value=”“,但是textarea是有闭合标签</textarea>,所以只要把值放在两个标签的中间就好了。
  82. 我把上传类的上传文件路径改成了File/date(“Y-m-d”)/。这样在修改文章能容时,就可以正常显示文章图片了。
  83. img .thumbnail:给图片加上边框。
  84. JS清空某个DOM值:$(“#{元素id}”).val(“”);赋值为空
  85. 每一次post提交数据,都会存在$_POST数组里面。不同的表单有不同的字段名,一般都是对应数据库的字段名。当同一个表单反复提交的时候,新数据会覆盖旧数据,再加上有if(IS_POAT)做判断。不用担心数据混淆的问题。,不对不对,$_POST里面的数据只有在表单的action=”“对象里能取到,其他地方根本取不到这些数据。就可以相当于当一个表单被提交的时候,它将带着大量的表单post数据去找action=”“里面的意中人,而这些个数据就像手心里的雪花,给你看过就没了,只有在数据刚刚提交的时候马上取下来,才能取到。不然比方说我提交之后再去访问这个action=”“里面的目标文件,让他print_r($_POST), 就会发现,没有数据,相当于数据失效了。
    84.class=”col-xs-6 col-md-3”什么意思? 这个是相应式网格的语法, 你可以这样认为,当屏幕为小屏幕(<768px)时自动使用class=”col-xs-6” 当屏幕为中屏(>=768px)时自动使用 class=”col-md-3”

猜你喜欢

转载自blog.csdn.net/qq_41281571/article/details/81838429