PHP疑问
㈠ php小疑问
echo "\$a + \$b = ".$a+$b;
加、减法的运算优先级比连字符(.)的优先级低。
因此此处是先运算了 "\$a + \$b = ".$a,再做加法。
这样就成了一个字符串加上一个数字。字符串会自动做intval运算,得到0, 所以出来的结果就是$b的值50。
要正确显示可以加上括号 :
echo "\$a + \$b = ".($a+$b);
就可以显示正常的结果:
$a + $b = -50
㈡ php的问题
我也遇到过,不过没理会!刚刚看到就去查了下为啥呢?还真找到了!转给你!
相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:
1、我字段类型是not null,为什么我可以插入空值
2、为毛not null的效率比null高
3、判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table where column is not null 呢。
带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样。
首先,我们要搞清楚“空值” 和 “NULL” 的概念:
1、空值是不占用空间的
2、mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。
搞清楚“空值”和“NULL”的概念之后,问题基本就明了了,我们搞个例子测试一下:
CREATE TABLE `test` (
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;
插入数据:
INSERT INTO `test` VALUES (null,1);
mysql发生错误:
#1048 - Column 'col1' cannot be null
再来一条
INSERT INTO `test` VALUES ('',1);
成功插入。
可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的问题1也就有答案了。
对于问题2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。
而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。
我们再向test的表中插入几条数据:
INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');
现在表中数据:
现在根据需求,我要统计test表中col1不为空的所有数据,我是该用“<> ''” 还是 “IS NOT NULL” 呢,让我们来看一下结果的区别。
SELECT * FROM `test` WHERE col1 IS NOT NULL
SELECT * FROM `test` WHERE col1 <> ''
可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件。
---------------------------------
http://blog.csdn.net/eroswang/article/details/8529817
Mysql数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中核心语言。不过在MySQL数据库中执行SQL语句,需要小心两个陷阱。
陷阱一:空值不一定为空
空值是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。此时为出现什么情况呢
我先创建了一个表。在这个表中有两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中插入一条记录,其中往Date字段中插入的是一个NULL空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。
在MySQL数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的TimesTamp数据类型。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。
陷阱二:空值不一定等于空字符
在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。
在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。这就是在MySQL中执行SQL语句遇到的第二个陷阱。在实际工作中,空值数据与空字符往往表示不同的含义。数据库管理员可以根据实际的需要来进行选择。如对于电话号码等字段,可以默认设置为空值(表示根本不知道对方的电话号码)或者设置为空字符(表示后来取消了这个号码)等等。由于他们在数据库中会有不同的表现形式,所以数据库管理员需要区别对待。笔者更加喜欢使用空值,而不是空字符。这主要是因为针对空值这个数据类型有几个比较特殊的运算字符。如果某个字段是空字符,数据库中是利用字段名称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他数据库的显示方式也是不同的。
一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。
二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。
判断NULL用is null 或者 is not null。 sql语句里可以用ifnull函数来处理
判断空字符串‘’,要用 ='' 或者 <>''。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非'')显示,否则打印0
㈢ 为什么现在很多人都说,PHP很难找到工作呢
PHP作为一种非常简单的Web开发语言,与Linux、Apache、MySQL紧密结合,形成了LAMP的开源黄金组合,不仅降低了使用成本,还提高了开发速度,满足了新型交互网络开发的应用,使得php软件工程师成为一个快速发展的职业。
据六星教育介绍,PHP语言开发工资不错。以六星教育为例,学生在六星学习四个月后可以获得面试机会。他们有的工资在8k左右相当可观,有的很优秀,有其他语言基础的工资更高。php如果你想有一个光明的未来,你必须增加员工的数量。虽然有些人最后会被淘汰,但如果你努力,就不会轮到你了。一年内你找不到工作。那些符合工作要求的人已经去工作了。地球上的任何生物,甚至植物,都是竞争激烈的,他们会淘汰那些没有上进心,没有求生欲的。只有行业火了,高校才会推出课程,得到高校、大企业、中小企业的认可,顺应潮流,提高薪酬上限,整体提升行业薪酬。
㈣ 关于php一点疑问。。。
数组的自动转换行为目前没有定义。 //这是重点
<?php
$a = "1"; // $a 是字符串
$a[0] = "f"; // 是字符串偏移量吗?结果会是什么?
?>
由于一些历史原因,PHP 支持通过偏移量进行的字符串索引,这和数组索引的语法一样。以上的例子就产生了一个问题:$a 应该变成一个第一个元素是“f”的数组呢,还是“f”成了字符串 $a 的第一个字符?
目前版本的 PHP 将以上第二个赋值理解成字符串的偏移量标识,即 $a 变成了 "f",尽管如此,这种自动转换的地结果应该被认为未定义。PHP 4 引入了新的花括号语法来访问字符串的字符,请使用该语法来替代以上的操作:
<?php
$a = "abc"; // $a 为一个字符串
$a{1} = "f"; // $a 目前为 "afc"
?>
㈤ 有关php的疑问
PHP并不是门优秀的语言,但PHP的开源资源很丰富,使用它的最大理由是开源资源。
不要认为依赖框架不好,一个网站不基于框架开发,其可扩展性与维护性会十分差。为什么要使用框架开发?框架不仅仅是提供各种功能,框架还能让代码更标准化。例如我用CI做的一个网站,你如果懂CI的话一接手就知道怎么对它扩展与维护。
主流的PHP框架很多,CI和thinkphp等都比较简单,你可以先使用这两种框架。而且框架有时候不总是只用一种,视项目而定,小站的话用轻量框架很够用。要是大型而且复杂的项目,使用zend framework这一量级的框架比较好。
框架可以创建出一个系统,但框架不是一个系统,你需要对框架加工才能做出系统。但其实PHP开源系统也不少,如果项目需要快速开发的,还是直接使用开源系统吧。
国内的确有不少CMS,使用起来很容易,对于不懂PHP程序的人来说也很方便。但国内系统的扩展性很差,你需要修改它的后台结构或者加一个功能非常困难。要是你有意要做一个专业的开发人员,你应该使用drupal,drupal是目前最易于扩展的PHP CMS,也是三大CMS之一(wordpress, joomla, drupal)。而且drupal拥有上万的扩展功能,你想实现某个功能说不定搜索一下就有,写都不用写。国内的CMS因为不容易扩展,所以很少出现可安装的扩展模块。
㈥ php类疑问
送鲜花和扔鸡蛋明显是动作,而不是对象。已扔鲜花为例,完整的描述是当前用户对某帖子扔了鲜花。因此一种方式是在用户对象中增加扔鲜花的方法,另一种方式是在帖子对象中增加被扔鲜花的处理方法。
对于面向对象思想,你可以从现实中映射,没有不依赖对象而单独存在的方法,所以很少需要你所说的那种杂类的。
当然,在实际开发中,有一些共性的方法,而我们又发现没有必要去实现这个对象,那么可以弄一个工具类来安放它。例如,切分中文字符串,这个方法理论上应该附加给String对象,但是创建一个String对象可能比写个项目都麻烦,同时大部分方法php都已经内置了,也没必要非要在String对象中重新来一次,因此放入工具包对象中。
㈦ php抛出异常疑问
这里是系统异常,自动抛出的,而你的做法相当于是捕获到异常之后有没做任何处理又把他给抛出了。
相当于这样:
try{
#1/0;
#等价于
thrownewException('除数为零异常',1);
}catch(Throwable$e){
throw$e;
}
而一般对于异常的做法
try{
#1/0;
#等价于
thrownewException('除数为零异常',1);
}catch(Throwable$e){
#也可以输出
return$e->getMessage();
}
㈧ 学习PHP的疑问
1:网上源码不一定符合你的要求与需求。
2:网上的源码都是一些比较小的项目。
3:大公司对网站性能要求比较高,会开发出一个体系,这也是网上源代码不能做到的。
4:数据库设计,数据库优化 等要求,网上源码也不一定符合要求。
5:网站的风格也不一定符合你的需求。
6:为了高负载,使用高速缓存,有许多选择,但是有性能优良之分,所以也不一定符合要求。
总之是为了满足不同的需要不同的需要。
㈨ 想学PHP,但有一些疑问
嗯,楼主是哪里人,这个,说话的逻辑有点不习惯。
1、php现在优势不大了,一是别的语言也发展得很好,比如python、ror、.net、jsp(j2ee)等可以比php做得更好。二是php有一定的局限性,只能用来做web的表层,如果你要用来谋生建议不只学好php,特别要关注python与java。
2、php语言本身是免费的,你用php开发网站zend公司不收费。
discuz、ecshop是别人用php开发出来的产品,分属两个公司,并分别注册了版权。如果你不是用在企业、政府部门而又不用来盈利他们是不会向你收费的,这在他们的公司上有声明,你尽可以研究、用来改并发布到网上去。但如果你用来挣钱,比如放在网上挂网络、谷歌或别人的广告就不行了。
3、浏览器能看到的是经php编辑器编译的部份,已经全部转为html语言了,除非php源码有漏洞,不然是看不到后台的php源码的。
另外,php暂时不能开发桌面系统或其它软件系统,但python、java可以。
㈩ php二次开发流程一些疑问
1,我培训过,但培训的不是PHP,培训机构里老师讲的东西都比较简单+结构化。
2,cms能用到的就很多,网上DEDE
PHPWING
PHP168
都属于比较火的CMS了。
2次开发,只是在功能上
对程序本身进行优化
加添加新的功能,结构大致不变。
2次开发,也包括一个单位拥有一套成熟的程序,然后利用这套程序做很多程序相同
美工不同的网站卖给不同的客户。程序结构为核心不变,美工为样式,只变样式。
3,一个项目接下来后,美工-程序。最费时间的是客户提出了很多公司程序不具备的功能,我们进行添加功能。
4,看什么性质的2次开发了,如果是专业的2次开发,只优化和添加功能,工资相对中等5000+以上。如果是用以上2中说的一套成熟程序做网站当做卖产品,3000+以上。不过大体中,现在的公司都是2者共存的。只能说
哪一者做的更专业写。2次开发上专业些为主?还是卖产品为主?取决于公司性质。
除美工外掌握的东西很多,JS
XMLDOM
JQUERY
CSS
AJAX
PHP
json
PHP其他摸板技术,等等。
数据库mysql
sql
等相关其他软件
编辑器软件
数据库操作
软件
等等。
以上楼主多次说到2次开发,现在的公司大多倾向于
2次开发为辅
,以卖产品为主。
卖产品就属于
用自己2次开发的程序做出网站
卖给客户。这样的公司的技术员,水平不需要太高
会嵌套,CTRL+C
+v
就行懂点语法
函数调用
对象调用就行,因为公司的程序体系已经完善,能完成客户的所需大部分功能。在卖产品中,客户肯定是提问题的不是每个客户都不挑刺得,所以挑了刺,公司的2次开发就会进行了这就是客户意见后,公司接受然后行动。属于这样采纳式2次开发。
然后不断的一值这个循环下去。