`
ythzjk
  • 浏览: 75723 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

类与对象(PHP5)

    博客分类:
  • php
阅读更多

第19章 类与对象(PHP5)之九:模式(Patterns)

模式是最好的实践和设计的描述方法。它给普通的编程问题展示一个可变的解决方案。
工厂模式(Factory)
工厂模式允许在运行的时间实例化一个对象。自从工厂模式命名以来,制造一个对象是可能的。
例子 19-23.工厂方法 (Factory Method)
复制PHP内容到剪贴板
PHP代码:

<?php
class Example
{   public static function factory($type)//The factory method
    
{   if (include_once 'Drivers/'.$type.'.php'
         {    
$classname 'Driver_' $type;
            return new 
$classname;
        }else{   throw new 
Exception ('Driver not found');  }
    }
}
?>

在类中允许定义一个驱动器在不工作时被加载的方法。如果类例子是一个数据库抽象类,可以象如下这样加载一个MySQL和SQLite驱动
复制PHP内容到剪贴板
PHP代码:

<?php
 $mysql 
Example::factory('MySQL'); // Load a MySQL Driver
 
$sqlite Example::factory('SQLite'); // Load a SQLite Driver
?>

单独模式(Singleton)
单模式适用于需要一个类的单独接口的情况。最普通的例子是数据库连接。这个模式的实现
允许程序员构造一个通过许多其他对象轻松地访问的单独接口。
例子 19-24.单模式函数(Singleton Function)
复制PHP内容到剪贴板
PHP代码:

<?php
class Example
{   // Hold an instance of the class
    
private static $instance;
    private function 
__construct()//A private constructor;prevents direct creation of object 
    
{   echo 'I am constructed';   }
     public static function 
singleton()// The singleton method 
    
{   if (!isset(self::$instance)) 
         {    
$c __CLASS__;
            
self::$instance = new $c;
        }
        return 
self::$instance;
    }   
    
// Example method
    
public function bark() {   echo 'Woof!';   }
    
// Prevent users to clone the instance
    
public function __clone(){   trigger_error('Clone is not allowed.',E_USER_ERROR);  }
}
?>

允许类实例的一个单独接口被重新获得。
复制PHP内容到剪贴板
PHP代码:

<?php
$test 
= new Example// This would fail because the constructor is private
$test Example::singleton();// This will always retrieve a single instance of the class
$test->bark();
$test_clone = clone($test); // This will issue an E_USER_ERROR.
?>
 

第19章 类与对象(PHP5) 之十:魔法方法(Magic Methods)

函数名__construct, __destruct (注意构造函数和析构函数), __call, __get, __set, __isset, __unset (注意重载), __sleep, __wakeup, __toString, __set_state, __clone and __autoload是PHP类里边的魔法函数.
函数名 __construct, __destruct(注意构造函数和析构函数), __call, __get, __set, __isset, __unset (see 注意重载), __sleep, __wakeup, __toString, __set_state, __clone and __autoload在PHP类里是魔术的.在任何类里你不能用这些名字给函数命名除非你想与它们的魔术功能性相关联。
    注意: PHP储量将所有用__开始的函数名作为魔术函数。推荐地,在PHP里不能用__做函数名除非你想用文件证明是魔术函数。
__sleep()和__wakeup()
serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。
使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
例子 19-25. Sleep and wakeup
复制PHP内容到剪贴板
PHP代码:

<?php
class Connection 
{   protected $link;
    private 
$server$username$password$db;
    public function 
__construct($server$username$password$db)
    {   
$this->server $server;
        
$this->username $username;
        
$this->password $password;
        
$this->db $db;
        
$this->connect();
    }
    private function 
connect()
    {   
$this->link mysql_connect($this->server$this->username$this->password);
        
mysql_select_db($this->db$this->link);
    }
    public function 
__sleep() {   mysql_close($this->link);   }
    public function 
__wakeup() {   $this->connect();   }
}
?>

__toString
__toString方法允许一个类决定当它被修改为string类型时是如何起作用的。
例子 19-26.Simple example
复制PHP内容到剪贴板
PHP代码:

<?php
class TestClass// Declare a simple class
{   public $foo;
    public function 
__construct($foo){  $this->foo $foo;  }
    public function 
__toString()     {  return $this->foo;   }
}
$class = new TestClass('Hello');
echo 
$class;
?>

上例将输出:Hello
__toString方法将只在使用echo()和print()直接地组合时被调用是一个有效的注释方法。
例子 19-27. Cases where __toString is called
复制PHP内容到剪贴板
PHP代码:

<?php
echo $class//__toString called
echo 'text',$class//__toString called (still a normal parameter for echo)
echo 'text'.$class// __toString not called (concatenation operator used first)
echo (string)$class//__toString not called (cast to string first)
echo "text $class";//__toString not called (cast to string first)
?>

__set_state
从PHP 5.1.0开始static方法是通过var_export()函数来访问类接口的。这个方法的唯一参数是一个包含属性出口的以为array(‘property’=value,…)形式的数组

 

 

 

第19章:类与对象(PHP5)之十一:最终关键字(Final Keyword)

PHP5引入了最终关键字,防止子类使用final从一个重要的方法做定义的前缀。如果类本身已经被定义为final,类将不能被扩展。
例子 19-28.Final方法实例
复制PHP内容到剪贴板
PHP代码:

<?php
class BaseClass 
{   public function test() 
    {   
        echo 
"BaseClass::test() called\n";  
    }
    final public function 
moreTesting()
    { 
        echo
"BaseClass::moreTesting() called\n"
    }
}
class 
ChildClass extends BaseClass 
{
   public function 
moreTesting() 
   {
       echo 
"ChildClass::moreTesting() called\n";
   }
}
//Results in Fatal error:Cannot override final method BaseClass::moreTesting()
?>

例子 19-29. Final 类实例
复制PHP内容到剪贴板
PHP代码:

<?php
final class BaseClass 
{    public function test()
     {  
         echo 
"BaseClass::test() called\n";  
     }
   
//Here it doesn't matter if you specify the function as final or not
   
final public function moreTesting()
   {
       echo
"BaseClass::moreTesting() called\n";
   }
}
class 
ChildClass extends BaseClass {  }
//Results in Fatal error:Class ChildClass may not inherit from final class (BaseClass)
?>

[ 本帖最后由 forest 于 2006-5-4 18:29 编辑 ]
 
 

 

第19章 类与对象(PHP5)之十二:对象克隆(Object cloning)

通过完全地复制属性创建一个对象的拷贝不是通常想要的行为。需求的一个好的实例适合于拷贝构造函数,
如果有一个对象描述一个GTK窗口和对象保存这个GTK窗口的资源,当你创建一个副本,你或许想创建一个相同的属性新窗口使用和保存新对象资源的新窗口。另一个例子是当你复制父对象时如果保存一个引用给另一个对象,你想创建其他类的一个新实例来分开拷贝所属的复制品。一个对象的拷贝是使用clone关键字来创建的(如果可能的话可以调用对象的__clone()方法),一个对象的__clone()方法不能被直接声明。
复制PHP内容到剪贴板
PHP代码:
$copy_of_object = clone $object;

当一个对象被克隆时,PHP5将执行一个所有对象的属性的浅拷贝。任何对其它变量引用的属性将只保留引用。如果一个__clone()方法被定义,然后重新创建一个对象的克隆方法来允许任何必需的属性当它需要被改变时调用。
例子 19-30. 克隆一个对象
复制PHP内容到剪贴板
PHP代码:

<?php
class SubObject
{   static $instances 0;
    public 
$instance;
    public function 
__construct(){  $this->instance=++self::$instances;  }
    public function 
__clone() {  $this->instance=++self::$instances;  }
}
class 
MyCloneable
{   public $object1;
    public 
$object2;
    function 
__clone()
    {
       
$this->object1=clone($this->object1);//Force a copy of this->object,otherwise it will point to same object.
    
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print(
"Original Object:\n");
print_r($obj);
print(
"Cloned Object:\n");
print_r($obj2);
?>

上例将输出:
复制内容到剪贴板
代码:
Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )
    [object2] => SubObject Object
        (
            [instance] => 2
        )
)
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )
    [object2] => SubObject Object
        (
            [instance] => 2
        )
)

 

 


 

第19章:类与对象(PHP5)之十三:对象比较(Comparing objects)

 

在PHP5中,对象的比较比PHP4中的更复杂和更协调的期望的一个面向对象语言(倒不是说PHP5是这样的一门语言)。当使用比较操作符(==),对象变量以一种简单的方式被比较。也就是:如果它们具有相同的属性和值,两个对象的实例是相等,并且是同一个类的实例。
另一方面,当使用恒等式操作符(===)时,对象变量当且仅当它们引用同一个类的同一个实例时是相同的
一个例子就可以阐明这些规则
例子 19-31.PHP5中的对象比较实例
复制PHP内容到剪贴板
PHP代码:

<?php
function bool2str($bool)
{    if (
$bool===false) {  return 'FALSE';  } 
else {  return 
'TRUE';  }
}
function 
compareObjects(&$o1, &$o2)
{   echo 
'o1 == o2 : 'bool2str($o1 == $o2) . "\n";
    echo 
'o1 != o2 : ' bool2str($o1 != $o2) . "\n";
    echo 
'o1 === o2 : ' bool2str($o1 === $o2) . "\n";
    echo 
'o1 !== o2 : ' bool2str($o1 !== $o2) . "\n";
}
class 
Flag
{   public $flag;
    function 
Flag($flag true) {  $this->flag $flag;  }
}
class 
OtherFlag
{   public $flag;
    function 
OtherFlag($flag true) {  $this->flag $flag;  }
}
$o = new Flag();
$p = new Flag();
$q $o;
$r = new OtherFlag();
echo 
"Two instances of the same class\n";
compareObjects($o$p);
echo 
"\nTwo references to the same instance\n";
compareObjects($o$q);
echo 
"\nInstances of two different classes\n";
compareObjects($o$r);
?>

上例将输出:
复制内容到剪贴板
代码:
Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Two references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Instances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
 
 

第19章 类与对象(PHP5)之十四:映射(反射)Reflection

介绍(Introduction)
PHP 5与一个API完全映射来以增加反向工程师类,接口,函数和方法的效率(性能)并加以扩展。另外, API映射并且为函数,类和方法提供获取文档注释的方法。
API映射是对Zend引擎一个面向对象的扩展。包括以下类:
复制PHP内容到剪贴板
PHP代码:

<?php
class Reflection { }
interface 
Reflector { }
class 
ReflectionException extends Exception { }
class 
ReflectionFunction implements Reflector { }
class 
ReflectionParameter implements Reflector { }
class 
ReflectionMethod extends ReflectionFunction { }
class 
ReflectionClass implements Reflector { }
class 
ReflectionObject extends ReflectionClass { }
class 
ReflectionProperty implements Reflector { }
class 
ReflectionExtension implements Reflector { }
?>

注:为了详细了解这些类,请看下一章。 如果我们将执行如下例子的代码:
例子 19-32.API映射的基本用法
复制PHP内容到剪贴板
PHP代码:

<?php
Reflection
::export(new ReflectionClass('Exception'));
?>

上例将输出:
复制内容到剪贴板
代码:
Class [ <internal> class Exception ] {
  - Constants [0] { }
  - Static properties [0] { }
  - Static methods [0] { }
  - Properties [6] {
    Property [ <default> protected $message ]
    Property [ <default> private $string ]
    Property [ <default> protected $code ]
    Property [ <default> protected $file ]
    Property [ <default> protected $line ]
    Property [ <default> private $trace ]
  }
  - Methods [9] {
    Method [ <internal> final private method __clone ] { }
    Method [ <internal> <ctor> public method __construct ] {
      - Parameters [2] {
        Parameter #0 [ <required> $message ]
        Parameter #1 [ <required> $code ]
      }
    }
    Method [ <internal> final public method getMessage ] {  }
    Method [ <internal> final public method getCode ] {  }
    Method [ <internal> final public method getFile ] {  }
    Method [ <internal> final public method getLine ] {  }
    Method [ <internal> final public method getTrace ] {  }
    Method [ <internal> final public method getTraceAsString ] { }
    Method [ <internal> public method __toString ] { }
  }
}
异常映射(ReflectionException)
ReflectionException 扩展标准异常并由API映射抛出。引入了非特定方法或属性。
映射函数(ReflectionFunction)
ReflectionFunction类允许你反向设计函数。
复制PHP内容到剪贴板
PHP代码:

<?php
class ReflectionFunction implements Reflector
{
    final private 
__clone()
    public 
object __construct(string name)
    public 
string __toString()
    public static 
string export()
    public 
string getName()
    public 
bool isInternal()
    public 
bool isUserDefined()
    public 
string getFileName()
    public 
int getStartLine()
    public 
int getEndLine()
    public 
string getDocComment()
    public array 
getStaticVariables()
    public 
mixed invoke(mixedargs)
    public 
mixed invokeArgs(array args)
    public 
bool returnsReference()
    public 
ReflectionParameter[] getParameters()
    public 
int getNumberOfParameters()
    public 
int getNumberOfRequiredParameters()
}
?>

注:getNumberOfParameters()和getNumberOfRequiredParameters()在PHP5.0.3中增加,而invokeArgs()是在PHP5.1.0中增加。
为内省一个函数,您必须首先创建ReflectionFunction 类的一个实例。您可以随后访问这个实例中的任何上述方法。
例子 19-33. 使用ReflectionFunction 类
复制PHP内容到剪贴板
PHP代码:

<?php
/** A simple counter
 * @return  int  */
function counter() 
{   static 
$c 0;
    return 
$c++;
}
// Create an instance of the Reflection_Function class
$func = new ReflectionFunction('counter');
// Print out basic information
printf(
    
"===> The %s function '%s'\n".
    
"     declared in %s\n".
    
"     lines %d to %d\n",
    
$func->isInternal() ? 'internal' 'user-defined',
    
$func->getName(),
    
$func->getFileName(),
    
$func->getStartLine(),
    
$func->getEndline()
);
// Print documentation comment
printf("--->Documentation:\n%s\n",var_export($func->getDocComment(),1));
if (
$statics=$func->getStaticVariables())//Print static variables if existant
{  printf("--->Static variables:%s\n",var_export($statics,1));  }
printf("--->Invokation results in:");//Invoke the function
var_dump($func->invoke());
//you may prefer to use the export() method
echo "\nReflectionFunction::export() results:\n";
echo 
ReflectionFunction::export('counter');
?>

注:方法invoke()通过象call_user_func()这样的函数接受自变量的一个变化的数值。
映射参数 (ReflectionParameter)
ReflectionParameter类取回一个函数或方法的参数的信息。
复制PHP内容到剪贴板
PHP代码:

<?php
class ReflectionParameter implements Reflector
{
    final private 
__clone()
    public 
object __construct(string name)
    public 
string __toString()
    public static 
string export()
    public 
string getName()
    public 
bool isPassedByReference()
    public 
ReflectionClass getClass()
    public 
bool isArray()
    public 
bool allowsNull()
    public 
bool isOptional()
    public 
bool isDefaultValueAvailable()
    public 
mixed getDefaultValue()
}
?>

注: 在PHP 5.0.3中增加了getDefaultValue(), isDefaultValueAvailable()和isOptional(),而isArray()则是在PHP5.1.0中增加的。
为内省函数参数,你必须首先创建ReflectionFunction或ReflectionMethod类的一个实例,然后用getParameters()方法来返回一个数组型参数。
例子 19-34. Using the ReflectionParameter class
复制PHP内容到剪贴板
PHP代码:

<?php
function foo($a$b$c) { }
function 
bar(Exception $a, &$b$c) { }
function 
baz(ReflectionFunction $a$b 1$c null) { }
function 
abc() { }
//通过命令行用给定的参数创建ReflectionFunction的一个实例   
$reflect = new ReflectionFunction($argv[1]);
echo 
$reflect;
foreach (
$reflect->getParameters() as $i => $param)
{    
printf"-- Parameter #%d: %s {\n".
        
"   Class: %s\n".
        
"   Allows NULL: %s\n".
        
"   Passed to by reference: %s\n".
        
"   Is optional?: %s\n".
        
"}\n",
        
$i
        
$param->getName(),
        
var_export($param->getClass(), 1),
        
var_export($param->allowsNull(), 1),
        
var_export($param->isPassedByReference(), 1),
        
$param->isOptional() ? 'yes' 'no');
}
?>

映射类(ReflectionClass)
ReflectionClass类允许你反向设计类。
复制PHP内容到剪贴板
PHP代码:

<?php
class ReflectionClass implements Reflector
{   final private __clone()
    public 
object __construct(string name)
    public 
string __toString()
    public static 
string export()
    public 
string getName()
    public 
bool isInternal()
    public 
bool isUserDefined()
    public 
bool isInstantiable()
    public 
bool hasConstant(string name)
    public 
bool hasMethod(string name)
    public 
bool hasProperty(string name)
    public 
string getFileName()
    public 
int getStartLine()
    public 
int getEndLine()
    public 
string getDocComment()
    public 
ReflectionMethod getConstructor()
    public 
ReflectionMethod getMethod(string name)
    public 
ReflectionMethod[] getMethods()
    public 
ReflectionProperty getProperty(string name)
    public 
ReflectionProperty[] getProperties()
    public array 
getConstants()
    public 
mixed getConstant(string name)
    public 
ReflectionClass[] getInterfaces()
    public 
bool isInterface()
    public 
bool isAbstract()
    public 
bool isFinal()
    public 
int getModifiers()
    public 
bool isInstance(stdclass object)
    public 
stdclass newInstance(mixedargs)
    public 
ReflectionClass getParentClass()
    public 
bool isSubclassOf(ReflectionClass class)
    public array 
getStaticProperties()
    public 
mixed getStaticPropertyValue(string name [, mixed default])
    public 
void setStaticPropertyValue(string namemixed value)
    public array 
getDefaultProperties()
    public 
bool isIterateable()
    public 
bool implementsInterface(string name)
    public 
ReflectionExtension getExtension()
    public 
string getExtensionName()
}
?>

注:PHP5.1.0中增加了hasConstant(), hasMethod(), hasProperty(), getStaticPropertyValue()和 setStaticPropertyValue()。
分享到:
评论

相关推荐

    php5 类与对象

    ### PHP5 类与对象知识点详解 #### 1. PHP 类与对象 在 PHP5 中,类是用于定义对象模板的一种语法结构。一个类可以包含属性(变量)和方法(函数)。对象则是根据类实例化的实体。 ```php class Person { public...

    PHP5类与对象编程

    ### PHP5类与对象编程详解 #### 一、引言 随着PHP5的发布,PHP引入了一种全新的对象模型(Object Model),这标志着PHP在面向对象编程(OOP)方面迈出了重要的一步。相比于早期版本,PHP5的对象处理方式更加高效且功能...

    php面向对象手册

    相较于 PHP4,PHP5 引入了许多新特性,包括真正的类和对象支持、命名空间、接口、抽象类等,这些都是构建大型应用的基础。 #### 三、类和对象的概念 - **类(Class)**:类是对一组具有相同特性和行为的对象的抽象...

    面向对象的php操作mssql类.zip

    面向对象的PHP操作MSSQL类是一个用于与微软SQL Server数据库进行交互的工具,它将传统的数据库连接和查询封装在类结构中,提高了代码的可读性和可维护性。在这个压缩包中,我们只有一个文件“面向对象的php操作mssql...

    PHP面向对象 PHP类结构图

    PHP面向对象 PHP类结构图 非常全面的类结构解析

    php面向对象(类)教程

    在PHP5及以上版本中,对OOP的支持大大增强,使得开发者可以构建更加结构化和可维护的程序。 1. **类(Class)**:类是面向对象编程的基础,它是创建对象的蓝图或模板。在PHP中,你可以定义一个类,包含属性(成员...

    PHP5面向对象(第三章_类特性)

    在PHP5中,面向对象编程引入了许多高级特性,使得它能更好地支持面向对象的设计原则。本章主要讨论了三个核心的面向对象特性:静态变量和方法、final关键字以及abstract(抽象)类和方法。 首先,我们来探讨静态...

    php面向对象程序设计类.zip

    在PHP编程中,面向对象(Object-Oriented Programming, OOP)是一种强大的设计模式,它允许程序员通过类和对象来组织代码,实现更高效的代码复用和更好的结构化。本教程将深入探讨PHP中的面向对象特性,特别是类的...

    PHP面向对象类的实例-计算器

    在PHP编程中,面向对象(Object-Oriented Programming, OOP)是一种...这只是一个起点,PHP面向对象的世界远比这广阔,包括异常处理、访问控制、魔术方法、静态属性与方法、命名空间、Traits等更多概念等待我们去探索。

    深入PHP 面向对象、模式与实践.rar

    《深入PHP:面向对象、模式与实践》是一本专注于PHP编程技术的专业书籍,它涵盖了PHP开发中的核心概念、面向对象编程、设计模式以及最佳实践。这本书对于PHP开发者来说,是提升技能、深化理解的重要资源。 首先,让...

    php5.zip_php5

    PHP5引入了完整的面向对象编程(OOP)支持,包括类定义、继承、封装、多态等特性。 - 类定义:使用`class`关键字,如`class MyClass {...}`。 - 对象创建:通过`new`关键字实例化对象,如`$obj = new MyClass();`。...

    深入PHP面向对象模式与实践第2版

    《深入PHP面向对象模式与实践第2版》是一本专注于PHP面向对象编程的书籍,它不仅涉及到面向对象编程的基础知识,还深入讲解了面向对象设计模式以及如何在实际项目中应用这些模式。该书是对PHP开发者掌握面向对象技术...

    20140207PHP01_PHP面向对象程序设计.pdf

    在PHP中,面向对象编程自PHP 5开始得到广泛应用,并在后续版本中不断改进。 #### 1. 什么是过程化 在讨论面向对象之前,我们需要先理解过程化的概念。过程化编程(Procedural Programming)是一种编程范式,它侧重...

    PHP5类与对象编程.pdf

    在PHP5中,类与对象编程引入了丰富的特性,使得面向对象的编程更加灵活和强大。本篇主要讨论了范围解析操作符(::)、`self`和`parent`关键字、静态关键字以及类常量等核心概念。 首先,范围解析操作符(::)是PHP...

    PHP的类、对象、构造方法。

    PHP作为一种动态类型的语言,自PHP5开始引入了完整的面向对象支持,使得开发者可以利用类和对象的概念来组织和管理代码。本文将深入探讨PHP中的类、对象以及构造方法。 首先,类(Class)是面向对象编程的基础,它...

    php面向对象程序设计类

    本篇文章将深入探讨PHP的面向对象程序设计类,包括类的定义、实例化以及特殊方法`__set()`和`__get()`的使用。 1. **类的定义** 类是面向对象编程的基本单位,它封装了数据和操作这些数据的方法。在PHP中,我们...

    php5面向对象编程

    在PHP5中,类(Class)用于定义对象的属性(Attributes)和方法(Methods)。属性是对象的状态,而方法则是对象的行为。通过方法,对象之间进行通信,而不是直接访问彼此的内部状态。在PHP5中,可以声明私有...

    php面向对象分页类

    本篇文章将详细探讨如何创建一个PHP面向对象的分页类,以及它的核心概念和实现方式。 首先,我们来理解面向对象的基本概念。在PHP中,面向对象包括类(Class)、对象(Object)、属性(Properties)和方法(Methods...

    php ob PHP面向对象教程

    一、类与对象 类是创建对象的蓝图,它定义了对象的属性和行为。在PHP中,我们使用关键字"class"来声明一个类。例如: ```php class MyClass { public $property; function __construct() { // 构造函数 } ...

Global site tag (gtag.js) - Google Analytics