代码编织梦想

zc_core/banggood/refactor/cache/structs/brands.php

370行
public function getBrandUrl( brandid)$curLang=COUNTRYSUBDOMAIN==ar?null:$this>Lang>currentLang();return$this>querySection($brandid,RCACHEBRANDSECTIONURL,$curLang);383publicfunctiongetBrandActivityUrl( b r a n d i d ) $ c u r L a n g = C O U N T R Y S U B D O M A I N = = ′ a r ′ ? n u l l : $ t h i s − > L a n g − > c u r r e n t L a n g ( ) ; r e t u r n $ t h i s − > q u e r y S e c t i o n ( $ b r a n d i d , R C A C H E B R A N D S E C T I O N U R L , $ c u r L a n g ) ; 383 行 p u b l i c f u n c t i o n g e t B r a n d A c t i v i t y U r l ( brand_id){
curLang=COUNTRYSUBDOMAIN==ar?null: c u r L a n g = C O U N T R Y S U B D O M A I N = = ′ a r ′ ? n u l l : this->Lang->currentLang();
return this>querySection( t h i s − > q u e r y S e c t i o n ( brand_id, RCACHE_BRAND_SECTION_ACTIVITY_URL, $curLang);
}

applications/banggood/models/mod_banner/banner.php

199行
if ($curLang != DEFAULT_LANGUAGE && COUNTRY_SUBDOMAIN != ‘ar’){

applications/banggood/models/mod_init/init.php

160行
if (this->curLang != ‘en-GB’ && COUNTRY_SUBDOMAIN != ‘ar’) { this->curLang != ‘en-GB’ && COUNTRY_SUBDOMAIN != ‘ar’) { homeUrl .= this>curLang[0]. t h i s − > c u r L a n g [ 0 ] . this->curLang[1].’/’;
}

applications/banggood/models/mod_init/init.php 1773行,世杰已经修改过,但没起作用

首页 ,分类页,搜索页
二级域名去除语种路径/ar/

面向对象的核心概念

对象

  1. 对象也是一种变量
  2. 对象和数组比较,两者序列化后可以看出:对象多了一个指针,指向它所属的类。
  3. 当一个对象的实例变量引用其他对象时,序列化该对象时也会对引用对象序列化。

类是定义一系列属性和操作的模板,对象则把属性具体化,交给类处理。对象就是数据,本身不包含方法,但有一个“指针”

(方便理解)指向类,类里可以有方法。类和对象是不可分割的,有对象就必定有一个类(特殊情况:由标量强制类型转换的

object,没有一个类和它对应,PHP中的一个“寡人”stdClass类收留这个对象)


魔术方法-“语法糖”

__set()和__get()方法
  1. 两个方法归到重载(动态地“创建”类属性和方法)
call和callStatic方法
  1. 防止调用不可访问(如未定义,或不可见)的方法而出错,__call()会被调用
__tostring(PHP中方法不区分大小写,但开发中需规范)
  1. 如果类中定义了此方法,打印对象时候就会调用此方法
  2. toString方法也是一种序列化。直接echo一个对象会报错,PHP限制了实现toSTring后即可使用
继承和多态

都是对类的复用,一个是类级别的复用,一个是方法级别的复用。
1.类的继承和组合
组合:定义两个类A和B,在A类中创建B类的对象C,把这个对象C视为A类的一个属性,并调用它的方法处理问题。
继承:父与子关系。

组合偏重整体和局部,继承偏重父与子的关系。编程中使用两者的标准就是低耦合耦合是软件结构内不同模块之间

互连程度的度量,也就是不同模块间的依赖程度。低耦合就是尽可能使模块独立,之间的接口尽量少而简单。在二者均可使用

的情况下,更倾向于使用组合。

继承破坏封装性
如定义鸟类为父类,具有羽毛属性和飞翔方法。其子类天鹅,鸭子等继承鸟类。显然鸭子不需要飞翔方法,但作为子类,它们

却可以无区别使用飞翔方法,这就破坏了封装性。
继承是紧耦合
父子类捆绑一起。但组合仅通过唯一接口和外部进行通信。
继承扩展复杂
继承层数增加和子类的增加,将涉及大量方法重写。(所以一般建议继承层数不超过3层)
不恰当地使用继承可能违反现实世界的逻辑

底层代码多用组合,可以提高效率,避免对象臃肿;顶层/业务层代码多用继承,提高灵活性,业务使用方便。

接口

接口本身不提供实现,只是提供一个规范(PHP中接口可以淡化为设计文档,起到一个团队对基本契约的作用)。PHP是弱类型

,强调灵活,不推荐大规模使用接口。SPL(标准PHP库)实现了一些接口,最主要的就是Iterator迭代器接口,通过实现这个

接口就可以使对象能够用于foreach结构。比如SPL中的DirectoryIterator类,它在继承SplFileInfo类的同时,实现

了Iterator、Traversable、SeekableIterator这三个接口。

Iterator接口的原型:
![这里写图片描述](https://img-blog.csdn.net/20180329115621306?

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FkZTEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/

gravity/SouthEast)
如果一个类声明了实现Iterator接口,就必须实现这五个方法,如果实现了这五个方法,那么就很容易对这个类的实例进行迭

代。DirectoryIterator之所以能拿来就用,是因为系统以及实现了Iterator接口。(为什么实现了Iterator接口,其对象就可

以被用作foreach对象呢?在对PHP实例对象使用foreach时,会检查这个实例有没实现Iterator接口,如果实现了,就会通过内

置方法或使用实现类中的方法模拟foreach) 所以可以像下面这样使用:

$dir = new DirectoryIterator(dirname(FILE));
foreach($dir as $fielinfo){
    if(!$fielinfo->isDir()){
    echo $fielinfo->getFilename(),"\t",$fileinfo->getSize(),PHP_EoL;
    }
}

接口就是这样本身什么都不做,系统悄悄在内部实现了接口的行为,所以只要实现这个接口,就可以使用接口提供的方法。这

就是接口“即插即用”思想。接口是对多重继承的一种变相实现


反射

面向对象被赋予了自省的能力,这个自省的过程就是反射。
**反射指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数、注释等的详细信息。这种动态获取

信息以及动态调用对象方法的功能称为反射API。**

$reflect = new ReflectionObject($a);//$a对象
//获取对象属性列表
$pros = $reflect->getProperties();
//获取对象方法列表
$m = $reflect->getMethods();
//获取对象属性列表所属的类
echo get_class($a);

反射API功能显然强大,甚至还能还原这个类的原型,包括方法的访问权限。如下

//反射获取类的原型
$obj = new ReflectionClass('person');
$className = $obj->getName();
$Methods = $Properties=array();
foreach ($obj->getProperties() as $v){
    $Properties[$v->getName()] = $v;
}
foreach ($obj->getMethods() as $v){
    $Methods[$v->getName()] = $v;
}
echo "class{$className}\n{\n";
is_array($Properties) && ksort($Properties);
foreach ($Properties as $k=>$v){
    echo "\t";
    echo $v->isPublic() ? 'Public' : '',$v->isPrivate() ? 'Private' : '',$v->isProtected() ? 'Protected' : '',

$v->isStatic() ? 'Static' : '';
    echo "\t{$k}\n";
}
echo '\n';
if(is_array($Methods)){
    ksort($Methods);
}
foreach ($Methods as $k=>$v){
    echo "\tfunction{$k}()\n";
}
echo "}\n";

输出如下:

class person{
public gender
public name
function get(){}
function set(){}
function say(){}
}

PHP手册中关于反射API还有几十个,反射完整的描述了一个类或者对象的原型。反射不仅可以用于类和对象,还可以用于函数

、扩展模块、异常等。

反射的作用

反射可以用于文档生成。因此可以用它对文件里的类进行扫描,逐个生成描述文档。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wade11/article/details/79644325

php底层学习-从底层分析引用_dream-追梦的博客-爱代码爱编程

本文从燕十八老师视频学习中总结 给变量赋值的时候发生了什么? 例如: $a = 1; $b = $a; 在第一次赋值的时候,产生了一个结构体,并在symbol_table中记录了变量名和结构体的内存地址 {

PHP 底层 - 学习/实践-爱代码爱编程

1.应用场景 了解并学习PHP底层实现原理, 帮助提高对PHP的认识,以及对编程语言的认知, 站在更高维度下审视编程世界, web世界.以及互联网甚至未来. 2.学习/操作 环境 Windows10 64位 专业版 laravel 5.8 / 5.7  phpstudy v8.0 或者 

PHP 底层分析-爱代码爱编程

一、PHP 的编译特点 注:脚本一运行结束,opcode 将会被清除;但是第三方工具:apc,xcache 等加速器可以保存 opcode 二、PHP 变量的底层实现 由 zend 虚拟机实现,zend 虚拟机是用 C 语言开发的 疑问:PHP 中有8种数据类型,但为什么 zval->value 联合体中,只有5种? 答:① NUL

学习记录,PHP学习记录(一)-爱代码爱编程

php:世界上最好的语言,引无数人争战,web开发上神器语言,说到网页开发就不得不提到php。 工作摸鱼期间看了下php基础语法,简单的记录一下,以下均来源于菜鸟教程,php。   <?php // PHP 代码 ?>   <!DOCTYPE html> <html> <body>

php foreach 底层实现,PHP foreach原理详解-爱代码爱编程

这篇文章介绍的内容是关于PHP foreach原理详解 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 PHP foreach原理详解当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()怎么来理解这个呢?$arr = array(1,2,3);foreach

php底层原理那本书最好,PHP的底层原理-爱代码爱编程

PHP文件的执行过程 先从一个简单的php文件开始,通过php文件的编译过程来引入php的底层 $phpCode = '<?php echo "The bottom of PHP";?>'; $tokens = token_get_all($phpCode); foreach($tokens as $key => $val){

php底层代码在哪看,深入了解php底层机制(-)_php-爱代码爱编程

作为一门动态语言,php是如何实现的,其底层机制如何,具有什么样的特点,本文深入浅出介绍了包括php设计理念、整体结构、核心数据结构和变量在内的相关底层知识,对我们更好的开发php程序,优化性能等有一定的指导意义。TAGPhp 底层机制 性能优化目录1、概述… 1what is php?. 1了解它底层实现的目的?. 12、php的设计理念及特点… 1

PHP底层原理以及代码执行过程-爱代码爱编程

PHP的底层原理 从图上可以看出,php从下到上是一个4层体系 Zend引擎 Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行 opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围