PHP面向对象深入研究之【命名空间】与【自动加载类】

简介:

命名空间

避免类名重复,而产生错误。

<?php

require_once "useful/Outputter.php";

class Outputter {
    // output data
    private $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$obj = new Outputter(); // 同一命名空间下,类名不能相同,默认命名空间为空。空也是一种命名空间。
$obj -> setName("Jack");
print $obj->getName();
//namespace useful; // 更改命名空间,否则查询不到Hello类,Fatal error: Class 'my\Hello' not found
$hello = new Hello();
?>

<?php
// useful/Outputter.php
namespace useful; // 命名空间

class Outputter {
    // 
}

class Hello {
    
}
?>

如何调用命名空间中的类

<?php

namespace com\getinstance\util;

class Debug {
    static function helloWorld() {
        print "hello from Debug\n";
    }
}

namespace main;
// com\getinstance\util\Debug::helloWorld(); // 找不到Debug类
\com\getinstance\util\Debug::helloWorld(); // 加斜杠之后,就从根部去寻找了。

// outPut:hello from Debug
?>

使用use关键字

<?php

namespace com\getinstance\util;

class Debug {
    static function helloWorld() {
        print "hello from Debug\n";
    }
}

namespace main;
use com\getinstance\util;
//Debug::helloWorld(); //Fatal error: Class 'main\Debug' not found 
util\Debug::helloWorld();
?>

使用下面的处理,直接可以调用类

<?php

namespace com\getinstance\util;

class Debug {
    static function helloWorld() {
        print "hello from Debug\n";
    }
}

namespace main;
use com\getinstance\util\Debug; // 直接使用到类
Debug::helloWorld();
?>

\表示全局

global.php
<?php
// no namespace

class Lister {
    public static function helloWorld() {
        print "hello from global\n";
    }
}
?>

<?php
namespace com\getinstance\util;
require_once 'global.php';
class Lister {
    public static function helloWorld() {
        print "hello from ".__NAMESPACE__."\n";  // __NAMESPACE__当前namespace
    }
}

Lister::helloWorld();  // access local
\Lister::helloWorld(); // access global
?>

输出:
hello from com\getinstance\util
hello from global

命名空间加{}

<?php
namespace com\getinstance\util {
    class Debug {
        static function helloWorld() {
            print "hello from Debug\n";
        }
    }
}

namespace main {
    \com\getinstance\util\Debug::helloWorld();
}
?>
output:
hello from Debug

全局命名空间

<?php
namespace { // 全局空间
    class Lister {
        public static function helloWorld() {
            print "hello from global\n";
        }
    }
}
namespace com\getinstance\util {
    class Lister {
        public static function helloWorld() {
            print "hello from ".__NAMESPACE__."\n";
        }
    }

    Lister::helloWorld();  // access local
    \Lister::helloWorld(); // access global
}
?>

__autoload 自动加载类

ShopProduct.php
<?php

class ShopProduct {
    function __construct() {
        print "ShopProduct constructor\n";
    }
}
?>

<?php
function __autoload( $classname ) { // 自动加载,根据类名加载类
    include_once( "$classname.php" );
}
$product = new ShopProduct( 'The Darkening', 'Harry', 'Hunter', 12.99 );
?>

output:
ShopProduct constructor

进一步优化处理

位于文件夹business/ShopProduct.php
<?php
class business_ShopProduct { // 这里的类命名就要遵循规则了
    function __construct() {
        print "business_ShopProduct constructor\n";
    }
}
?>

<?php
function __autoload( $classname ) {
    $path = str_replace('_', DIRECTORY_SEPARATOR, $classname ); // 智能化处理
    require_once( "$path.php" );
}

$x = new ShopProduct();
$y = new business_ShopProduct();
?>
output:
ShopProduct constructor
business_ShopProduct constructor


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5171215.html,如需转载请自行联系原作者
相关文章
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
339 1
|
9月前
|
存储 监控 算法
基于 PHP 布隆过滤器的局域网监控管理工具异常行为检测算法研究
布隆过滤器以其高效的空间利用率和毫秒级查询性能,为局域网监控管理工具提供轻量化异常设备检测方案。相比传统数据库,显著降低延迟与资源消耗,适配边缘设备部署需求,提升网络安全实时防护能力。(238字)
318 0
|
监控 算法 安全
基于 PHP 的员工电脑桌面监控软件中图像差分算法的设计与实现研究
本文探讨了一种基于PHP语言开发的图像差分算法,用于员工计算机操作行为监控系统。算法通过分块比较策略和动态阈值机制,高效检测屏幕画面变化,显著降低计算复杂度与内存占用。实验表明,相比传统像素级差分算法,该方法将处理时间缩短88%,峰值内存使用量减少70%。文章还介绍了算法在工作效率优化、信息安全防护等方面的应用价值,并分析了数据隐私保护、算法准确性及资源消耗等挑战。未来可通过融合深度学习等技术进一步提升系统智能化水平。
204 2
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
385 3
|
PHP 开发者
深入探索PHP的命名空间与自动加载机制
在现代PHP开发中,随着项目的不断扩大和复杂度的增加,如何有效地组织代码、避免命名冲突以及提高性能成为了开发者面临的重要问题。本文将详细探讨PHP中的命名空间和自动加载机制,解释它们是如何帮助解决这些问题的,并提供一些最佳实践建议。
342 20
|
PHP 开发者
PHP命名空间的深入理解与实践####
本文作为一篇技术性文章,将引领读者深入探索PHP命名空间的概念、重要性及其在实际开发中的应用。我们将从命名空间的基本定义出发,逐步剖析其在大型项目中解决代码冲突、提升代码组织性和可维护性方面的关键作用。通过实例解析和最佳实践分享,帮助开发者更好地理解和运用PHP命名空间,从而优化项目结构和提高开发效率。 ####
|
PHP 开发者 容器
PHP命名空间深度解析及其最佳实践####
本文深入探讨了PHP中引入命名空间的重要性与实用性,通过实例讲解了如何定义、使用及别名化命名空间,旨在帮助开发者有效避免代码冲突,提升项目的模块化与可维护性。同时,文章还涉及了PHP-FIG标准,引导读者遵循最佳实践,优化代码结构,促进团队协作效率。 ####
304 1
|
PHP 开发者 容器
PHP命名空间深度解析与最佳实践####
本文深入探讨了PHP中命名空间(namespace)的机制、应用场景及最佳实践,旨在帮助开发者有效避免命名冲突,提升代码的组织性和可维护性。通过实例讲解,本文将引导您理解如何在实际项目中灵活运用命名空间,以及如何遵循业界公认的最佳实践来优化您的PHP代码结构。 ####
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
263 9