西安做网站公司|西安网站设计制作|西安网站建设|古月建站
当前位置:古月建站 > 新闻资讯 > 网站建设 >

古月建站带你了解最好开发语言php八编程法则

发表日期:2018-05-29文章编辑:admin浏览次数: 标签: 西安网站建设西安网站设计西安网站制作    

  PHP是最好的编程语言。对于PHP开发者来说php网站建设最好不过,掌握一些编程法则是十分重要的。而在PHP中,以双下划线(__)开头的方法称为魔术方法,它们扮演着非常重要的角色。
  
  常用的魔术方法包括:
  
  -__construct():类的构造方法;
  
  -__destruct():类的析构方法;
  
  -__call($funName, $arguments):当访问未定义或没有访问权限的方法时,__call()会被调用;
  
  -__callStatic($funName, $arguments):当访问未定义或没有访问权限的静态方法时,__call()会被调用;
  
  -__get($propertyName):读取类的成员变量时__get()会被调用;
  
  -__set($property, $value):写入类的成员变量时__set()会被调用;
  
  -__isset($content):当针对未定义或没有访问权限的成员使用isset()或empty()时__isset()会被调用;
  
  -__unset($content):在未定义或没有访问权限的成员上使用reset()时__unset()会被调用;
  
  -__sleep():在执行serialize()时__sleep()会被调用;
  
  -__wakeup():在执行deserialization()时__wakeup()会被调用;
  
  -__toString():使用echo方法直接输出对象时,__toString()会被调用;
  
  -__invoke():像调用函数一样调用对象时,对象的__invoke()会被调用;
  
  -__set_state($an_array):调用var_export()时__set_state()会被调用;
  
  -__clone():复制对象时__clone()会被调用;
  
  -__autoload($className):试图加载未定义的类;
  
  -__debuginfo():输出调试信息。
  
  古月建站将通过具体点的例子说明,这些PHP魔术方法的用法,都是古月建站在西安php网站建设过程中的经验。
  
  1. __construct()
  
  PHP构造方法是对象创建之后自动调用的第一个方法。任何类都有构造方法。如果没有显式定义,那么类会有个默认的构造方法,该方法没有参数,方法体为空。
  
  1) 构造方法的用法
  
  构造函数通常用来执行初始化工作,如在创建对象时设置成员变量的初始值。
  
  2) 声明类的构造方法的格式
  
  function __constrct([参数列表]){
  
  方法体 // 通常用于设置成员变量的初始值
  
  }
  
  注意:同一个类只能有一个构造方法,因为PHP不支持构造方法重载。
  
  完整的示例如下:
  
  <?php
  
  class Person
  
  {
  
  public $name;
  
  public $age;
  
  public $sex;
  
  /**
  
  * 显示定义带有参数的构造方法
  
  */
  
  public function __construct($name="", $sex="Male", $age=22)
  
  {
  
  $this->name = $name;
  
  $this->sex = $sex;
  
  $this->age = $age;
  
  }
  
  /**
  
  * say方法
  
  */
  
  public function say()
  
  {
  
  echo "Name:" . $this->name . ",Sex:" . $this->sex . ",Age:" . $this->age;
  
  }
  
  }
  
  不使用任何参数创建对象$Person1。
  
  $Person1 = new Person();
  
  echo $Person1->say(); //输出: Name:,Sex:Male,Age:22
  
  使用参数"James"创建对象$Person2。
  
  $Person2 = new Person("Jams");
  
  echo $Person2->say(); // 输出: Name: Jams, Sex: Male, Age: 22
  
  使用三个参数创建$Person3。
  
  $Person3 = new Person ("Jack", "Male", 25);
  
  echo $Person3->say(); // 输出: Name: Jack, Sex: Male, Age: 25
  
  2. __destruct()
  
  现在我们知道了构造方法,那么相对的就是析构方法。
  
  析构方法可以在对象销毁之前执行一些操作,如关闭文件、清空结果集,等等。
  
  析构方法是PHP5引入的新特性。
  
  析构方法的声明格式与构造方法 __construct() 类似,就是说__destruct()也以双下划线开头,其名称也是固定的。
  
  1) 析构方法的声明格式
  
  function __destruct()
  
  {
  
  // 方法体
  
  }
  
  注意:析构方法不能带任何参数。
  
  2) 析构方法的用法
  
  一般来说,PHP中析构方法并不是太常用。在类中它是可选的,通常用于在对象销毁之前执行某些清理工作。
  
  下面的例子演示了如何使用析构方法:
  
  <?php
  
  class Person{
  
  public $name;
  
  public $age;
  
  public $sex;
  
  public function __construct($name="", $sex="Male", $age=22)
  
  {
  
  $this->name = $name;
  
  $this->sex  = $sex;
  
  $this->age  = $age;
  
  }
  
  /**
  
  * say方法
  
  */
  
  public function say()
  
  {
  
  echo "Name:".$this->name.",Sex:".$this->sex.",Age:".$this->age;
  
  }
  
  /**
  
  * 定义析构方法
  
  */
  
  public function __destruct()
  
  {
  
  echo "Well, my name is ".$this->name;
  
  }
  
  }
  
  $Person = new Person("John");
  
  unset($Person); // 销毁上面创建的$Person对象
  
  以上程序的输出结果为:
  
  Well, my name is John
  
  3. __call()
  
  该方法有两个参数。第一个参数$function_name自动接收未定义方法的名称,第二个参数$arguments以数组的方式接收该方法调用的多个参数。
  
  1) __call()方法的用法
  
  function __call(string $function_name, array $arguments)
  
  {
  
  // 方法体
  
  }
  
  程序中调用未定义的方法时,__call()方法会自动被调用。
  
  示例如下:
  
  <?php
  
  class Person
  
  {
  
  function say()
  
  {
  
  echo "Hello, world!<br>";
  
  }
  
  function __call($funName, $arguments)
  
  {
  
  echo "The function you called:" . $funName . "(parameter:" ;  // 输出不存在的方法的名称
  
  print_r($arguments); // 输出不存在的方法的参数列表
  
  echo ")does not exist!!<br>\n";
  
  }
  
  }
  
  $Person = new Person();
  
  $Person->run("teacher"); // 如果对象内不存在的方法被调用,则 __call() 方法会被自动调用
  
  $Person->eat("John", "apple");
  
  $Person->say();
  
  输出结果如下:
  
  The function you called: run (parameter: Array([0] => teacher)) does not exist!
  
  The function you called: eat (parameter: Array([0] => John[1] => apple)) does not exist!
  
  Hello world!
  
  4. __callStatic()
  
  当程序中调用未定义的静态方法时,__callStatic()方法会被调用。
  
  __callStatic()的用法与__call()类似。示例如下:
  
  <?php
  
  class Person
  
  {
  
  function say()
  
  {
  
  echo "Hello, world!<br>";
  
  }
  
  public static function __callStatic($funName, $arguments)
  
  {
  
  echo "The static method you called:" . $funName . "(parameter:" ;  // 输出不存在的方法的名称
  
  print_r($arguments); // 输出不存在的方法的参数列表
  
  echo ")does not exist!<br>\n";
  
  }
  
  }
  
  $Person = new Person();
  
  $Person::run("teacher"); // 如果对象内不存在的方法被调用,则 __callStatic() 方法会被自动调用
  
  $Person::eat("John", "apple");
  
  $Person->say();
  
  输出结果如下:
  
  The static method you called: run (parameter: Array([0] => teacher)) does not exist!
  
  The static method you called: eat (parameter: Array([0] => John[1] => apple)) does not exist!
  
  Hello world!
  
  5. __get()
  
  当试图访问外部对象的私有属性时,程序会抛出异常并结束执行。但我们可以使用__get()方法来解决这个问题。它能在对象外部取得对象的私有方法。php网站建设示例如下:
  
  <?php
  
  class Person
  
  {
  
  private $name;
  
  private $age;
  
  function __construct($name="", $age=1)
  
  {
  
  $this->name = $name;
  
  $this->age = $age;
  
  }
  
  public function __get($propertyName)
  
  {
  
  if ($propertyName == "age") {
  
  if ($this->age > 30) {
  
  return $this->age - 10;
  
  } else {
  
  return $this->$propertyName;
  
  }
  
  } else {
  
  return $this->$propertyName;
  
  }
  
  }
  
  }
  
  $Person = new Person("John", 60);   // 用Person类初始化对象,并通过构造方法给属性赋初始值
  
  echo "Name:" . $Person->name . "<br>";   // 访问私有属性时, __get() 方法会自动被调用,这样就能间接取得属性值
  
  echo "Age:" . $Person->age . "<br>";    // __get() 方法自动被调用,并返回不同的值
  
  输出结果如下:
  
  Name: John
  
  Age: 50
  
  6. __set()
  
  __set($property, $value) 方法用来设置对象的私有属性。当试图设置对象中未定义的属性时,就会触发__set()方法,调用参数为被设置的属性名和属性值。
  
  示例代码如下:
  
  <?php
  
  class Person
  
  {
  
  private $name;
  
  private $age;
  
  public function __construct($name="",  $age=25)
  
  {
  
  $this->name = $name;
  
  $this->age  = $age;
  
  }
  
  public function __set($property, $value) {
  
  if ($property=="age")
  
  {
  
  if ($value > 150 || $value < 0) {
  
  return;
  
  }
  
  }
  
  $this->$property = $value;
  
  }
  
  public function say(){
  
  echo "My name is ".$this->name.",I'm ".$this->age." years old";
  
  }
  
  }
  
  $Person=new Person("John", 25); // 注意下面的代码会改变初始值
  
  $Person->name = "Lili";     // "name" 属性成功赋值。如果没有 __set() 方法,程序就会抛出异常
  
  $Person->age = 16; // "age" 属性成功赋值
  
  $Person->age = 160; // 160 是个非法值,所以赋值失败
  
  $Person->say();  // 输出:My name is Lili, I'm 16 years old.
  
  下面是输出结果:
  
  My name is Lili, I'm 16 years old
  
  7. __isset()
  
  在介绍__isset()方法之前,我先介绍下issset()方法。isset()方法主要用于判断某个变量是否被设置。
  
  在对象外部使用isset()方法有两种情况:
  
  如果参数是公有属性,那么可以利用isset()方法判断属性是否被设置;
  
  如果参数是私有属性,isset()方法将无法使用。
  
  那么,是否有办法判断私有属性被设置呢?当然,只需要在类里定义__isset()方法,就可以在对象外部利用isset()方法判断某个私有属性是否被设置了。
  
  对未定义或没有权限访问的属性调用isset()或empty()时,就会调用__isset()方法。示例如下:
  
  <?php
  
  class Person
  
  {
  
  public $sex;
  
  private $name;
  
  private $age;
  
  public function __construct($name="",  $age=25, $sex='Male')
  
  {
  
  $this->name = $name;
  
  $this->age  = $age;
  
  $this->sex  = $sex;
  
  }
  
  /**
  
  * @param $content
  
  *
  
  * @return bool
  
  */
  
  public function __isset($content) {
  
  echo "The {$content} property is private,the __isset() method is called automatically.<br>";
  
  echo  isset($this->$content);
  
  }
  
  }
  
  $person = new Person("John", 25); // 赋初始值
  
  echo isset($person->sex),"<br>";
  
  echo isset($person->name),"<br>";
  
  echo isset($person->age),"<br>";
  
  输出结果如下:
  
  1
  
  The name property is private,the __isset() method is called automatically.
  
  1
  
  The age property is private,the __isset() method is called automatically.
  
  1
  
  8. __unset()
  
  与__isset()类似,在未定义或无权限访问的属性上调用unset()方法时会触发__unset()方法。示例如下:
  
  <?php
  
  class Person
  
  {
  
  public $sex;
  
  private $name;
  
  private $age;
  
  public function __construct($name="",  $age=25, $sex='Male')
  
  {
  
  $this->name = $name;
  
  $this->age  = $age;
  
  $this->sex  = $sex;
  
  }
  
  /**
  
  * @param $content
  
  *
  
  * @return bool
  
  */
  
  public function __unset($content) {
  
  echo "It is called automatically when we use the unset() method outside the class.<br>";
  
  echo  isset($this->$content);
  
  }
  
  }
  
  $person = new Person("John", 25); // 赋初始值
  
  unset($person->sex),"<br>";
  
  unset($person->name),"<br>";
  
  unset($person->age),"<br>";
  
  输出结果如下:
  
  It is called automatically when we use the unset() method outside the class.
  
  1
  
  It is called automatically when we use the unset() method outside the class.
  
  1
更多相关信息:    
在百度搜索古月建站带你了解最好开发语言php八编的信息    在360搜索古月建站带你了解最好开发语言php八编的信息
在搜搜搜古月建站带你了解最好开发语言php八编的信息    在搜狗搜索古月建站带你了解最好开发语言php八编的信息
在必应搜索古月建站带你了解最好开发语言php八编的信息    在雅虎搜索古月建站带你了解最好开发语言php八编的信息
相关新闻

利用博客也能赚钱的10种方法

北美有39%的b2b营销人员认为博客文章是有价值的营销内容,博客是增加数字存在感的好方法,...

日期:2018-09-20 浏览次数:92

如何设计制作HTML5响应式网站建设

H5响应式网站目前已经占领了全网营销的流量入口,对于说起H5响应式网站很多人也是慢慢的熟...

日期:2018-09-20 浏览次数:112

网页设计制作常用的几款软件

对于想要加入网站设计制作行业的新手们,在学习网站制作设计的第一件事就是要选择确定一...

日期:2018-09-20 浏览次数:114

如何提高营销型网站建设的品质

随着现代互联网企业对于网站建设的要求是越来越高,营销型网站已经成为现在网站建设的主...

日期:2018-09-12 浏览次数:106

企业电商网站如何建设运营

如今互联网的时代电子商务已经是家喻户晓的一种购物方式,就用户的需求和购物方式使越来...

日期:2018-09-12 浏览次数:61

选择网站模板的注意事项

在互联网高速发展的时代,越来越多的企业进军到了互联网的网站营销行业之中,但是网站建...

日期:2018-09-12 浏览次数:82