---------------------------------------------------------
PHP知识大全
---------------------------------------------------------
1. 变量如何定义?如何检查变量是否定义?如何删除一个变量?怎样检测变量是否设置?
$定义 isset()// 检测变量是否设置
defined()// 检测常量是否设置
unset()//销毁指定的变量
empty()// 检测变量是否为空
2. 什么是可变变量?
一个变量的变量名可以动态的设置和使用。
$a = 'hello' , $$a = 'world', ${$a}=hello world
3. 变量赋值方式有哪几种?
1)直接赋值 2)变量间赋值 3)引用赋值
4. 引用和拷贝有什么区别?
拷贝是将原来的变量内容复制下来,拷贝后的变量与原来的变量使用各自的内存,互不干扰。
引用相当于是变量的别名,其实就是用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。
5. php中变量有哪些基本数据类型?
php支持8种原始数据类型包括:
四种标量类型(布尔型boolean,整型interger,浮点型float/double , 字符串string)
两种复合类型(数组array , 对象object)
两种特殊类型(资源resource,NULL)
6. 其它类型转换为boolean类型时,哪些被认为是false?
布尔值false,整型值0, 浮点型值0.0, 空白字符串, 字符串'0', 空数组,特殊数据类型NULL, 没有设定的变量。
empty()函数在哪些情况下返回true?
布尔值false,整型值0, 浮点型值0.0, 空白字符串, 字符串'0', array()空数组,特殊数据类型NULL, 没有任何属性的对象,没有赋值的变量。
7. 如果定义了一个变量$a ,但是没有赋初始值
那么$a==0吗? $a==false吗? $a==''吗?
$a==NULL吗? $a===NULL吗? 答:echo=>什么都没有 , var_dump=>NULL
empty($b)==true吗?———————————— echo=>1 , var_dump=>bool(true)
此时如果输出$a++是多少?——————— echo=>什么都没有 , var_dump=>NULL
如果输出++$a又是多少?————————— echo=>1 , var_dump=>int(1)
8. 字符串怎么转成整数,有几种方法?怎么实现?
强制类型转换: (整型)字符串变量名;
直接转换:settype(字符串变量,整型);
intval(字符串变量);
9. 标量数据和数组的最大区别是什么?
一个标量只能存放一个数据,而数组可以存放多个数据。
10. 常量如何定义? 如何检测一个常量是否被定义?常量的值只能是哪些数据类型?
define()//定义常量 , defined()//检查常量是否定义
常量的值只能是标量类型的数据。
11. 常量分为系统内置常量和自定义常量。请说出最常见的几个系统内置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION
12. 如果定义了两个相同的常量,前者和后者哪个起作用?
前者起作用,因为常量一旦定义就不能被重新定义或者取消定义。
13. 常量和变量有哪些区别?
1)常量前没有$符号;
2)常量只能通过define()定义,而不能通过赋值语句定义;
3)常量可以在任何地方定义和访问,而变量有全局和局部之分;
4)常量一旦定义就不能被重新定义或者取消定义,而变量而通过赋值方式重新定义;
5)常量的值只能是标量数据,而变量的数据库类型有8种原始数据类型。
14. PHP中常用的几个预定义的全局数组变量是哪些?
有9大预定义的内置数组变量:
$_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES,$_SERVER, $_ENV, $GLOBALS
15. 在实际开发中,常量最常用于哪些地方?
1)连接数据库的信息定义成常量,如数据库服务器的用户名、密码、数据库名、主机名;
2)将站点的部分路径定义成常量,如web绝对路径,smarty的安装路径,model、view或者controller的文件夹路径;
3)网站的公共信息,如网站名称,网站关键词等信息。
16. 函数的优越性有哪些?
提高程序的可维护性 提高软件的可靠性 提高程序的可重用性 提高程序的开发效率
17. 如何定义一个函数?函数名区分大小写吗?
1)使用 function 关键字;
2)函数命名规则和变量一样,以字母或者下划线开头,而不能以数字开头;
3)函数名不区分大小写;
4)函数名不可以使用已经声明过的或者系统自建的函数名称。
18. 什么是变量的能见度 或者 说是变量作用域?
就是变量在程序中的可作用范围。根据变量的能见度,变量分为局部变量和全局变量。
19. 什么是局部变量和全局变量?函数内是否可以直接调用全局变量?
局部变量是函数内部定义的变量,其作用域是所在的函数。如果函数外还有一个跟局部变量名字一样的变量,程序会认为它们两个是完全不同的两个变量。当退出函数的时候,其中的局部变量就同时被清除。全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内部是无法使用的。如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量,不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。全局变量还可以使用 $GLOBALS['var'] 来调用。
21. 什么是静态变量?
如果一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。
一般函数内的变量在函数调用结束后,其存储的数据将被清除,所占的内存空间也被释放。而使用静态变量时,该变量会在函数第一次被调用时被初始化,初始化后该变量也不会被清除,当再次调用该函数时,这个静态变量不再被初始化,而能保存上次函数执行完后的值。可以说静态变量在所有对该函数的调用之间共享。
22. php中函数传递参数的方式有哪些?两者有什么区别?
按值传递和按地址传递(或按引用传递)
(1)按值传递: 待传递的变量,与传递给函数之后的变量是存储在不同的空间中。所以函数体内对
该变量值做的修改,不影响原本的变量值。
(2)按地址传递: 使用 & 符号,表明该参数是以地址的方式传递值。并不会将主程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块地址导入函数之中,所以函数体内的该变量和主程序中的该变量在内存中是同一个。函数体做的修改,直接影响到函数体外部的该变量的值。
23.
关键字:PHP 时区 时间 日志
<body>
<?php
date_default_timezone_set('Asia/Hong_Kong');
set_error_handler("customError");
try
{
$chinatime = date('Y-m-d H:i:s');
$content = "Hello World. Testing!aaaaaaaaaaaaaa";
printr($chinatime);
logger($content);
//throw new Exception("Value must be 1 or below aaaaaaaaaaaaaaaaaaa");
}
catch(Exception $e)
{
printr("Exception Message: ".$e->getMessage());
logger("Exception Message: ".$e->getMessage());
}
//redefie print_r function
function printr($print_content)
{
print_r($print_content."<br />");
}
//record operation log into .log file
function logger($log_content)
{
$log_filename = date("Ymd").".log";
$file = fopen($log_filename ,"a+");
//fwrite($file, date('Y-m-d H:i:s')." ".$log_content."\r\n");
fwrite($file, date('H:i:s')." ".$log_content."\r\n");
fclose($file);
}
//define Error function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
?>
</body>
</html>
本文链接
网页模板就是templets中的htm文件,所以编写模板就是要编写html。这篇文章不是关于标签的具体使用,而是对网页模板的一些理解。包括基本的标签语法,封面模板,列表模板和文档模板的关系。
一 关于标签
dedecms标签:就像html标签,不过是织梦自定义的,由标签名,属性,和InnerText构成。
先看一段代码templets/index.htm
<strong>最近登陆的会员</strong><br/>
{dede:memberlist row=6 signlen=30}
<a href="/blog_article/[field_spaceurl/]/index.html" target="_blank">
<img src="/blog_article/[field_face/]/index.html" width="52" height="52"/> [field:uname/]<br/>
</a>
{/dede:memberlist}
通过运行网站主页index.php查看结果。
像dede:global就是标签名,name=cfg_webname是属性,在dede:memberlist标签间的就是InnerText。在织梦中,InnerText又称为底层模板。
短标签:像global这种只有单边的标签叫短标签,表示一个元素的值。
块标签:像memberlist这种成对的标签叫块标签,一般表示一系列的纪录,像上面的代码就表示列出6个会员的默写信息。研究一下会发现这些记录来自数据库。
[field:XX]这个代表记录中的某个属性值。
总结一下,编写模板时用到这些语言
Html代码+新增的dedecms标签语法。
Css和Js没有新语法,以外部文件的方式调用。
Php,mysql的代码大大减少,与数据库查询有关的代码大部分被标签语法。比如说调用memberlist标签,就等价于访问数据表dede_cms。Php主要用于插件等新模块的编写和修改。
以上只是织梦标签语法的简述,详见模板手册
标记手册1
标记手册2
站长百科
二 模板的种类
先说一下各个文件夹
System文件夹,里面放的是默认底层模板。当我们在块级标签间不写任何东西时,就会自动被调用来作为块级标签的InnerText。
Plus文件夹,里面放的是被root_dir/plus里的php调用的模板。经过一些研究也许能仿写这些模板的代码,待探究。
Default文件夹,里面放的是默认模板,是网页显示主要的模板,如果在网上下一个其他的dedecms模板(非官方默认模板),可能里面只是一个templets文件夹,因为这对外观已经足够了。下面是default文件夹的分析。
我以前只用到index.htm,其他的文件有什么用呢?
我认为这些文件可以分成两类:
第一类不是一个完整的页面,被include的(由于有了dedecms标签,html文档中也可以include)。如head.htm,footer.htm等。
第二类就是完整的页面了,呵呵。
而第二类又分为封面(index)模板,列表(list)模板,文档(内容,article)模板。文件夹中的index_XX.htm就是封面模板,依此类推。
在root_dir/index.php中的SetTemplet处把路径改为dirname(__FILE__) . "/templets/default/
list_article.htm",显示的内容不太完整。这些模板要怎么用呢?一下是我探索的办法:
打开dedecms的网站后台管理(对了,请先安装安装数据体验包,这样才有测试数据)
点击网站栏目管理
在网页基础中点更改
常规选项中栏目属性是频道封面
再选择高级选项
高级选项中封面模板为{style}/index_article.htm
如果你安装的数据和我是同一版本,就会知道网页基础是个一级栏目,底下组织了很多文章。
回到网站栏目管理
点击预览,会看到一个关于网页基础栏目的页面。由于常规选项中栏目属性是频道封面,高级选项中封面模板为{style}/index_article.htm,所以网页调用index_article.htm作为模板。
依此类推,如果在常规选项中栏目属性是最终列表栏目,高级选项中封面模板为{style}/list_article.htm,则会调用list_article.htm作为模板,文档模板也依此类推。
模板和栏目的关系
每一个栏目都有自己的三个模板,而同一个模板可被多个栏目所用。也就是说,模板只是提供了样式,但内容终究来至数据库。这也说明了为什么在root_dir/index.php中的SetTemplet处改路径不能显示完整的内容,因为模板没有绑定到某个具体栏目。这也是织梦作为内容管理系统的特点,把样式和内容分离。
再来说说文档模板,在常规选项->栏目属性处看到。作为频道封面栏目不能发布文章的。那我们选一个最终列表栏目,如”Html”
点击更改。看到常规选项中栏目属性是最终列表栏目,点高级选项,就能看到文档模板为{style}/article_article.htm,所以Html栏目下所有的文章都会以这个模板显示。
点击内容管理里的普通文章
选择一篇Html栏目下的文章,点预览(右边的那个绿色小球)
这时看到的是就是article_article.htm模板代表的样式。
到这里,应该就会如何显示/调试封面模板、列表模板和文档模板了。
那么如何编写模板,当然要先学过标签语法
A、function 扩展,如{dede:标记名称 function=”函数名(@me,其它参数)” /}
B、在Innertext中直接编程,也就是之前一直用的方法
再读一下index_article.htm,list_article.htm,article_article.htm。读源码是最好的学习方法^_^
可以看见templets/default中大部分的模板都是这三类,可见其重要性。那么有index_article.htm,list_article.htm,article_article.htm就够了,其他又是干什么的。
这就要讲到频道,频道是栏目的类型,文章(article)频道、图片(image)频道、软件(soft)频道(实质是一个下载频道)、商品(shop)频道等。频道是一种内容模型,比如动漫、风景都能用图片频道。所以就会有index_article.htm,index_ image.htm,index_ soft.htm,index_shop.htm。每个频道都有自己的三种模板。
总的来说,写网页具体要做的就是为每个频道编写网页模板。
关于模板的内容就分享到这里了。
本文链接