Dozens of problems-scumarket API Dev (1)

本文详细探讨了PHP中的引用文件操作、类属性赋值、静态属性与方法、JSON编码、数据库查询中文乱码解决方案及错误抑制技巧。通过实例展示了如何在PHP中灵活运用这些特性,并提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.require(),include(),require_once()和include_once()区别

     然后这儿有一片关于include_once和require_once()的性能比较http://www.php100.com/html/php/lei/2013/0905/5259.html


  2.PHP5的OOP特性,有一条是类的属性默认值不允许为对象类型。。。。

  

<?
    class A{    	
    }
	
    class Person{
    	private $name; //定义属性未赋值。
    	private $name1 = NULL; //定义属性空值 ,与未赋值一样。
    	private $married = true;  //用布尔型为属性赋值。	
    	private $grade = 0; //用整形数值为属性赋值
    	private $eyesight = 0.1; //用浮点型数字为属性赋值
		private $nationality = "China"; //用字符串为属性赋值
		private $arr = array("foo" => "bar", 12 => true); // 用数组为属性赋值
		//private $a = new A(); //PHP5不允许,创建对象类型赋值给属性
		//private $res = opendir("abc"); // PHP5不允许使用资源类型 
		//private $g = $this->grade; //不允许用前面定义的属性为新属性赋值。
		
    }
    $a = new Person();
?>

   refer:http://www.nowamagic.net/php/php_AttributeOfClass.php

   

   3.PHP中类的static属性和static方法

     首先,静态方法中调用非静态的属性/方法是不对的,$this是指代调用该方法的当前对象,是非静态的,所以在static方法中不能有$this.

    然后貌似类的static属性的初始化比较蛋疼。不像Java,有专门的静态构造器/static块用来静态初始化。下面提供一个解决方案:

   

对于共有的成员解决: 
class A { 
static public $child; 
} 
A::$child = new B(); 


对于私有的成员,只能: 
class A { 
static private $child; 
static public initialize() { 
self::$child = new B(); 
} 
} 
A::initialize();

   对PHP静态属性的讲解:http://www.nowamagic.net/php/php_StaticVariable.php

   PHP静态方法:http://www.nowamagic.net/php/php_StaticMethods.php


  4.阮一峰有一篇对PHP中JSON说的很好的文章:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

    PHP数组只有两种形态:索引数组、关联数组

    JSON只有两种形态:JSONObject、JSONArraay

    PHP有json_encode()和json_decode()。将数组或对象转化成JSON。而且只接受UTF-8编码,所以这一点在有中文的时候就有问题(下面提到)。

    json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

   不过有一种方法可以将索引数组强制转化为对象:

json_encode( (object)$arr );
  或
json_encode ( $arr, JSON_FORCE_OBJECT );


  5.遇到一个问题:PHP查询MySQL数据库,字段值为中文输出为乱码。如果对象的属性中存在着中文,json_encode会将中文转换为unicode编码,例如:'胥'经过json_encode处理后变为'\u80e5'.

    解决方案:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(json_encode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文!

   

<?php
class myClass {
    public $item1 = 1;
    public $item2 = '中文';
    
    function to_json() {
        //url编码,避免json_encode将中文转为unicode
        $this->item2 = urlencode($this->item2);
        $str_json = json_encode($this);
         //url解码,转完json后将各属性返回,确保对象属性不变
         $this->item2 = urldecode($this->item2);
         return urldecode($str_json);
     }
 }
 
 $c = new myClass();
 echo json_encode($c);
 echo $c->to_json();
 echo json_encode($c);
 echo json_encode('胥');
?>
输出结果:

{item1":1,"item2":"\u4e2d\u6587"}
{item1":1,"item2":"中文"}
"u80e5"

   另外在PHP文件的开头加上header("Content-type: text/html, charset:utf-8");声明页面为UTF-8编码。然后在数据库连接的时候指定数据库的字符集,这里用的PDO连接的数据库,对PDO设置UTF-8:

   

$this->db = new PDO(Config::$host, Config::$username, Config::$password,
                array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

   6.PHP中的“@”符号。

    @用来抑制错误,比如:

   

$username = @ $_GET['username'];
$password = @ $_GET['password'];
  

    上面如果没有“@”符号,访问URL没有加上"username"和"password"查询参数的话,页面会输出错误信息。

    加上“@”符号后,页面不会输出任何信息。这种情况下,我们可以自定义有好的错误信息。


   7.include_once()以及其他三个引用文件的路径问题。

    只能说".."什么的都不要用!

    这里有一个解决方案汇总:http://blog.youkuaiyun.com/oyd/article/details/2030293

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值