我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP高级特性如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP高级特性如何使用

这篇文章主要介绍“PHP高级特性如何使用”,在日常操作中,相信很多人在PHP高级特性如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP高级特性如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]

PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解]

利用反射来实现工厂模式的生产而无需创建特定的工厂类

反射[Relfection]

PHP高级特性如何使用

什么是Reflection

Reflection,即反射。反射提供给面向对象编程可以自省的能力

这么理解有点太过于概念化,通俗地讲,就是能根据事件的结果反查出原因。在编程中,可以根据一个被实例化的对象,反查出这个对象属于的类以及该类拥有所有属性以及方法,甚至可以读取文档注释。这个反查的过程就叫做反射

PHP 提供了完整的反射 API ,提供了内省类、接口、函数、方法和扩展的能力。此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。详细见PHP官网 PHP反射简介

Reflection能干什么

在上面讲到的,可以使用反射来获取一个类的所有属性以及方法还有注释文档,甚至可以获取类属性和方法的访问权限[protected/private],这些特性使得PHP的使用灵活性得到非常大的提高。例如:

– Laravel 框架的所谓优雅所在,即容器、依赖注入、IOC 控制反转就是依靠这些特性实现的

– Hyperf 框架的注解路由也是根据反射获得注释来实现的

– 生成文档 因为反射可以获取类属性和方法的访问权限,可以扫描整个项目的所有文件再使用反射来生成文档

– 测试驱动开发 利用反射获取该类的所有方法的特性,进行测试驱动开发

– 开发插件 利用反射获取类的内部结构的特性,实现 Hook 功能,例如框架插件的实现

Reflection的优缺点

优点 反射提供了对类的反解析,从而相比原本面向对象的编程方式获得了极高的灵活性,以及合理的使用能够让代码看起来更加优雅以及简洁。原本在面向对象的编程方式中,使用一个类的实例需要先 new 出一个对象再使用方法,但是使用了反射机制,只需要提供一个该类的方法然后使用反射机制即可使用该对象或者方法。Laravel 框架正是使用了大量的反射才获得了优雅的美誉,Swoole 的 Hyperf 框架的注解路由的实现也是使用了反射

缺点 同时,由于反射是类实例化的反过程,破坏了面向对象的封装性,直接将类的整个内部结构暴露,这就导致了反射一旦滥用,代码将难于管理,整个项目将非常混乱,甚至导致业务执行错乱。尤其在大项目几十人的团队中,试想一下,原本的面向对象,只告诉什么可以用,什么不可以用,CTO写好了底层代码,其他人继承后然后使用就行,内部结构啥的其他人都不知道。一旦用上了反射,如果有一个程序员不小心将原本是 protected 或者是 private 的属性或者方法设置成了可以访问,其他程序员在不知情的情况调用了本该隐藏的数据或者方法,那将导致不可预测的灾难【见下面示例代码】

其次,由于反射的灵活性极高,这导致了无法在 IDE 中通过直接直接点击代码溯源,对于新手真的是很蛋疼,Laravel 和Hyperf 都是如此

在下面的代码中,反射的机制直接将 private 方法设置成外部可访问

#Example:<?phpclass Foo {  private function myPrivateMethod() {    return 7;  }}$method = new ReflectionMethod('Foo', 'myPrivateMethod');//该反射功能直接将原本是private权限的方法设置成可访问$method->setAccessible(true);echo $method->invoke(new Foo);// echos "7"?>

工厂设计模式

三种工厂设计模式 [简单工厂模式] [工厂模式] [抽象工厂模式]

简单工厂模式 又称为静态工厂方法模式。简单的说,就是创建对象的方式是通过一个静态方法来实现的。在简单工厂模式中,根据传递的参数来返回不同的类的实例

在PHP中在简单工厂模式中,有一个抽象的产品类【即abstract class Calculate】,这个抽象类可以是接口/抽象类/普通类。这个抽象的产品类可以派生出多个具体的产品类【即class CalculateAdd以及class CalculateSub】。最后再由一个具体的工厂类【即class CalculateFactory】来获取所需要的产品类的实例

PHP高级特性如何使用

代码实现

1) 抽象产品生产类:运算抽象类

//生产抽象类abstract class Calculate{    //数字A    protected $number_a = null;    //数字B    protected $number_b = null;    //设置数字A    public function setNumberA( $number ){        $this->number_a = $number;    }    //设置数字B    public function setNumberB( $number ){        $this->number_b = $number;    }    //获取数字A    public function getNumberA(){        return $this->number_a;    }    //获取数字B    public function getNumberB(){        return $this->number_b;    }    //获取计算结果【获取生产出的产品】    public function getResult(){        return null;    }}

2) 具体产品生产类:加法运算 / 减法运算 等等

//加法运算class CalculateAdd extends Calculate{    //获取运算结果【获取具体的产品】    public function getResult(){        return $this->number_a + $this->number_b;    }}//减法运算class CalculateSub extends Calculate{    //获取运算结果【获取具体的产品】    public function getResult(){        return $this->number_a - $this->number_b;    }}//乘法 / 除法 等等其他运算【其他产品】

3) 工厂:工厂类。即用一个单独的类来创造实例化的过程,这个类就是工厂。也就是 简单工厂模式

在 php 中,实现的方式其实就一个 switch 函数或者是 php8 新出的 match 函数来实例化所需要的产品生产类

//根据运算不同实例化不同的对象//【也就是根据所需产品,实例化对应的产品类进行生产】//对应的实现其实就是一个switch或者php8函数新出的match函数//下面用最新的match函数做演示class CalculateFactory{    public static function setCalculate( $type = null ){        return match( $type ){            'add' => (function(){                return new CalculateAdd();            })(),            'sub' => (function(){                return new CalculateSub();            })(),            default => null;        };    }}//具体使用$calculate = CalculateFactory::setCalculate('add');$calculate->setNumberA = 1;$calculate->setNumberB = 2;//计算echo $calculate->getResult;//echo 3

总结:

简单工厂模式其实就是创建一个基类【abstract】,该类存放所有具体生产产品类的共用的代码,但是没有执行过程,然后具体生产产品的类全部继承基类再实现各自的生产过程。最后创建一个工厂类,该类用来根据传入的参数来获取所需的生产类

工厂方法模式 又称为工厂模式,属于创造型模式。在工厂模式中,工厂类的父类只负责定义公共接口,并不执行实际的生产动作。实际的生产动作则交给工厂的子类来完成。这样做将类的的实例化延迟到了工厂的子类,通过工厂的子类来完成实例化具体的产品,也就是生产

在工厂模式中,跟简单工厂模式不一样的是,有一个抽象的工厂类【即interface CalculateFactory】,可以是接口/抽象类,这个抽象的工厂类可以派生出多个具体的工厂类【即FactoryAdd以及FactorySub】

PHP高级特性如何使用

代码实现【以下代码需要用到上面的生产抽象类】

以下代码需要用到上面的生产抽象类:abstract class Calculate

以及具体的生产类,即:CalculateAdd 以及 CalculateSub。下面不再重复实现

interface CalculateFactory{    public function CreateCalculate();}class FactoryAdd implements CalculateFactory{    public function CreateCalculate(){        return new CalculateAdd();    }}class FactorySub implements CalculateFactory{    public function CreateCalculate(){        return new CalculateSub();    }}//具体使用//创建工厂实例$calculateFactory = new FactoryAdd();$add = $calculateFactory->CreateCalculate();$add->setNumberA( 1 );$add->setNumberB( 2 );//计算echo $add->getResult();//echo 3

总结:

工厂模式相比于简单工厂模式的区别在于,在简单工厂模式中,只有一个工厂来生产对应的生产对象【即CalculateFactory】。而在工厂模式中,每一个生产产对象都由自己的工厂来生产,并且这些工厂都继承自同一个接口【即 interface CalculateFactory】

抽象工厂模式 抽象工厂模式提供创建一系列相关或相互依赖对象的接口,而且无需指定它们具体的类。这么理解很抽象。通俗一点的解释就是,相比于上面的工厂模式来讲,抽象工厂模式在每个不同的工厂之上又有一个超级工厂,这个超级工厂是抽象的接口【interface】,用来生产具体的工厂

在抽象工厂模式中,有多个抽象的产品类【即abstract class Phone以及abstract class Android】,可以是接口/抽象类/普通类,每个抽象产品类可以派生出多个具体产品类【即class IPhone / class MiPhone 以及 class IOS / class Android】。一个抽象的工厂类【即interface AbstractFactory】可以派生出多个具体的工厂类【即class iPhoneFactory以及class MiFactory】,且每个具体的工厂类可以创建多个产品类的实例【即都有createPhone和createSystem】

PHP高级特性如何使用

代码实现

//抽象的产品类abstract class Phone{}abstract class System{}//具体的产品类class IPhone extends Phone{}class MiPhone extends Phone{}//具体的产品类class IOS extends System{}class Android extends System{}//超级工厂interface AbstractFactory{    public function createPhone();    public function createSystem();}//具体的苹果工厂class iPhoneFactory implements AbstractFactory{    //生产苹果手机    public function createPhone(){        return new IPhone();    }    //生产苹果系统    public function createSystem(){        return new IOS();    }}//具体的小米工厂class MiFactory implements AbstractFactory{    //生产小米手机    public function createPhone(){        return new MiPhone();    }    //生产安卓系统    public function createSystem(){        return new Android();    }}

总结:

抽象工厂模式相比于工厂模式,抽象工厂模式提供了一个接口用来规定所需要生产的产品。每个继承于该接口的工厂都能按照指定的模式进行生产【代码中的AbstarctFactory】

以上三种工厂模式,最终都是为了将重复的代码提取出来,并且按照特定的需求场景归纳好,进行解耦和复用,以便在需要的场景中直接使用

三种模式的概括为:

简单工厂:

一个抽象产品类(可以是:接口,抽象类,普通类),可以派生出多个具体产品类

单独一个具体的工厂类

每个具体工厂类只能创建一个具体产品类的实例

工厂模式:

一个抽象产品类(可以是:接口,抽象类,普通类),可以派生出多个具体产品类

一个抽象工厂类(可以是:接口,抽象类),可以派生出多个具体工厂类

每个具体工厂类只能创建一个具体产品类的实例

抽象工厂:

多个抽象产品类(可以是:接口,抽象类,普通类),每个抽象产品类可以派生出多个具体产品类

一个抽象工厂类(可以是:接口,抽象类),可以派生出多个具体工厂类

每个具体工厂类可以创建多个具体产品类的实例

三个模式之间的区别:

简单工厂模式只有一个抽象产品类,只有一个具体的工厂类

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个具体产品类的实例

工厂模式与反射的结合使用

可以利用反射的特性来实现工厂模式的生产过程,结合Laravel-admin进行举例

先看下以下的代码,需求背景:需要根据角色不同显示不同的权限按钮

<?phpclass TaskController extends BaseController{    use HasResourceActions;        protected function grid()    {            //Grid Columns...            if (Admin::user()->inRoles([AdminUserModel::getAssignmentRole()])) {                $grid->disableBatchActions();                $grid->disableEditButton();                $grid->disableCreateButton();                $grid->disableDeleteButton();            } elseif (Admin::user()->inRoles([AdminUserModel::getEvaluatorRole()])) {                $grid->disableBatchActions();                $grid->disableEditButton();                $grid->disableCreateButton();                $grid->disableDeleteButton();                $grid->actions(function (Grid\Displayers\Actions $actions) {                    $actions->append(new ConfirmCloseTaskAction());                });            } else {                $grid->disableCreateButton();                $grid->disableDeleteButton();                $grid->disableEditButton();                $grid->disableBatchActions();                $grid->disableViewButton();                $grid->disableActions();            }    }}

以上的代码很明显一看就显得很臃肿。且随着业务的增加【即Controller的增加】以及角色的增加,需要写更多重复的判断以及重复的代码

解决思路:

不同的角色需要拥有的不同的权限,每个角色都可以用一个固定的方法来设置权限,这个固定的方法可以为不同的角色设置权限。这些条件刚好满足工厂模式的使用场景:即:

抽象出一个产品类来派生出多个角色的权限产品类

抽象出一个工厂类来派生出多个具体的工厂类,这些工厂类表现为对应要使用权限按钮的场景

每个具体工厂【使用权限按钮的场景】可以创建多个具体产品类【即实例化多个角色的权限产品】

代码如下【在下面的代码中,将使用反射来代替工厂的生产】

1) 抽象出一个产品类来派生出多个角色的权限产品类

<?phpnamespace App\GridActionFactory;use Dcat\Admin\Grid;interface GridActionInterface{    //业务员角色的权限    function salesmanAction(Grid $grid);    //分配员角色的权限    function assignmentAction(Grid $grid);    //财务角色的权限    function financeAction(Grid $grid);    //....其他角色的权限}

2,3) 2,3两个步骤包含在一起。抽象出一个工厂类来派生出多个具体的工厂类,这些工厂类表现为对应要使用权限按钮的场景。其中,setRoleAction方法使用反射来直接生产,也就是替代了每个具体工厂类创建实例的过程

<?phpnamespace App\GridActionFactory;use Dcat\Admin\Admin;use Dcat\Admin\Grid;abstract class GridActionAbstract{    //    abstract public static function setAction(Grid $grid, string $role);        protected static function isInRoles(string $role): bool    {        return Admin::user()->inRoles([$role]);    }        protected static function setRoleAction(Grid $grid, string $role, string $class)    {        $r = new \ReflectionClass($class);        $methodName = $role . 'Action';        if (!$r->hasMethod($methodName))            throw new \Exception('Method Not Found [ method : ' . $methodName . ' ] ');        $method = $r->getMethod($methodName);        $method->invoke($r->newInstance(), $grid);    }}

根据以上的反射来实现实例化的过程,上面的TaskController的权限可以简化成下面的代码:

<?phpnamespace App\GridActionFactory;use Dcat\Admin\Grid;class TaskAction extends GridActionAbstract implements GridActionInterface{        public static function setAction(Grid $grid, string $role)    {        if (!parent::isInRoles($role)) return;        //通过调用父类的setRoleAction直接实现生产的过程        parent::setRoleAction($grid, $role, self::class);    }    //在TaskController下有需要使用权限按钮的角色    //分配员角色    public function assignmentAction(Grid $grid)    {        //权限按钮        $grid->showActions();        $grid->showViewButton();    }    //在TaskController下有需要使用权限按钮的角色    //财务角色    public function financeAction(Grid $grid)    {        $grid->showActions();        $grid->showViewButton();    }    //在TaskController下有需要使用权限按钮的角色    //业务员角色    public function salesmanAction(Grid $grid)    {    }    //....其他角色}

经过使用设计模式封装后,上面TaskController中控制权限的代码直接优化成如下:【优雅了不少~】

<?phpclass TaskController extends BaseController{    use HasResourceActions;        protected function grid()    {            //Grid Columns...            //财务角色按钮              TaskAction::setAction($grid, AdminUserModel::getFinanceRole());            //分配员角色按钮              TaskAction::setAction($grid, AdminUserModel::getAssignmentRole());            //...其他角色按钮                }}

到此,关于“PHP高级特性如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP高级特性如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP高级特性如何使用

这篇文章主要介绍“PHP高级特性如何使用”,在日常操作中,相信很多人在PHP高级特性如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP高级特性如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-22

PHP高级特性:如何掌握协程?

php 协程是一种实现并发编程的轻量级技术,借助生成器函数在 php 中实现。协程可在异步 i/o、爬虫和并行计算等场景下使用。实战案例中,协程用于处理海量数据并行计算,大幅提高效率。掌握协程可显著提升代码并行性和性能,为开发者提供高效并发
PHP高级特性:如何掌握协程?
2024-05-14

PHP高级特性:使用Redis实现高速缓存

在 php 中使用 redis 实现高速缓存,可显著提升应用程序性能和可扩展性。首先安装 redis,其次使用 predis 库连接到 redis。可通过 set 方法设置缓存,使用 get 方法获取缓存。实战案例演示如何设置和获取缓存项,
PHP高级特性:使用Redis实现高速缓存
2024-05-15

PHP中封装性的高级特性

封装是面向对象编程中非常重要的一个概念,它通过将数据和行为封装在一个对象内部,从而实现了数据的隐藏和保护。PHP作为一门面向对象的语言,也提供了丰富的封装性的高级特性,本文将通过具体的代码示例来介绍这些特性。访问控制(Access Cont
2023-10-21

PHP高级特性:使用Traits巧妙地复用代码

php 中的 traits 是一种特性,它允许代码复用,无需继承。主要优势包括:代码复用:在不同类之间共享代码,减少重复。灵活性:可以随时添加到类中,而无需重写或扩展类。避免多重继承:提供代码复用的替代方法,消除多重继承的复杂性和风险。PH
PHP高级特性:使用Traits巧妙地复用代码
2024-05-15

PHP高级特性:图像处理的实用技巧

php 提供了高级图像处理技术,包括缩放和裁剪、图像合成、滤镜、转换等。实战案例展示了如何使用这些技术创建缩略图,从而节省加载时间并展示图像。通过了解这些技术,可以提升图像处理能力,增强应用程序功能。PHP 高级特性:图像处理的实用技巧引
PHP高级特性:图像处理的实用技巧
2024-05-15

PHP高级特性:揭秘注解的力量

php注释中引入了注解,使注释更强大、更有用。注解语法以@符号后跟注解名称作为前缀,主要类型包括:类型注解:指定变量和函数参数的数据类型,有助于验证程序的正确性。类型提示:与类型注解类似,但不是php语法的一部分,用于ide和静态分析工具。
PHP高级特性:揭秘注解的力量
2024-05-14

PHP高级特性:RESTful API的实现技巧

PHP 高级特性:RESTful API 的实现技巧RESTful API(Representational State Transfer)是一种设计风格,它遵循 REST 原则,允许客户端与服务器之间的无状态交互。本文将探讨 PHP 中
PHP高级特性:RESTful API的实现技巧
2024-05-15

PHP高级特性:生成器与迭代器的妙用

回答: 生成器和迭代器是一种特殊函数和对象,可以逐个生成值,无需存储整个数据集。生成器: 生成一系列值,每次调用产生一个值;迭代器: 提供访问集合元素的方法,遍历时产生一个元素;实战: 用于分页,逐页生成数据集,无需将整个数据集存储在内存中
PHP高级特性:生成器与迭代器的妙用
2024-05-15

PHP高级特性:DOM扩展的全面指南

dom 扩展是一个强大的 php 工具,用于处理 xml 和 html 文档,它提供了对文档内容的编程访问。使用 dom,您可以创建、读取、修改和保存文档。dom 使用分层的对象模型表示文档,并提供丰富的 api 来与这些对象交互。dom
PHP高级特性:DOM扩展的全面指南
2024-05-15

PHP面向对象编程:高级特性详解

php 的 oop 高级特性包括:接口:定义方法,确保不同类具有相似行为。多态性:子类对象实现父类方法,提供灵活性。命名空间:组织代码,避免命名冲突。特性:复用代码,无需继承即可添加方法和属性。魔法方法:允许对象与语言特定方式交互。PHP
PHP面向对象编程:高级特性详解
2024-05-10

PHP高级特性:实战中运用抽象类和接口

利用抽象类和接口实现代码解耦和重用:抽象类强制子类实现方法,提供公共接口。接口定义方法蓝图,解耦代码并实现多态性。实战案例:抽象类 animal 定义动物说话行为,子类 dog 和 cat 实现具体说话行为。接口 speakable 定义说
PHP高级特性:实战中运用抽象类和接口
2024-05-15

PHP高级特性:巧用命名空间提升代码可维护性

命名空间是一种 php 特性,用于组织和管理代码,防止命名冲突,提高可读性和可维护性。具体步骤包括:使用 namespace 关键字创建命名空间。使用反向域名命名约定指定命名空间名称。使用完整限定名称或 use 语句在外部访问命名空间元素。
PHP高级特性:巧用命名空间提升代码可维护性
2024-05-14

PHP高级特性:深入解析闭包的奥秘

答案: php 闭包是一种匿名函数,可以在定义作用域外访问变量。详细描述:闭包创建:使用 function 关键字创建,可以访问定义作用域内的变量。访问变量:闭包可从内部读取外部变量,访问函数 outer 中定义的变量。实战案例:用于根据自
PHP高级特性:深入解析闭包的奥秘
2024-05-15

PHP高级特性:安全编程的最佳实践

为了增强 php 应用程序的安全性,本文介绍了六大 php 高级特性,包括:数据验证防范跨站脚本攻击 (xss)使用 preparada 语句会话管理使用散列算法https 和 tlsPHP 高级特性:安全编程的最佳实践在 PHP 开发中
PHP高级特性:安全编程的最佳实践
2024-05-15

PHP高级特性:异步编程的底层机制

异步编程在 php 中通过协程和生成器实现。协程是一种轻量级线程,而生成器是协程的 php 实现。协程调度由 php 运行时自动处理,确保所有协程并行运行。异步编程的优势体现在实战案例中,例如并行执行 http 请求,从而提高响应速度。PH
PHP高级特性:异步编程的底层机制
2024-05-15

如何使用PHP-FPM提高Web应用性能

随着Web应用的发展和用户量的增加,如何提高Web应用的性能已经成为开发者们关注的焦点之一。而PHP-FPM(FastCGI Process Manager)作为一个高性能的PHP进程管理器,能够有效地提升Web应用的性能。本文将介绍如何使
2023-10-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录