分类 php 下的文章

2017
07-29

Phalcon教程

2017
01-12

Phalcon入门教程之安装

Phalcon安装

  # 下载安装包
  wget https://github.com/phalcon/cphalcon/archive/v3.0.1.tar.gz

  # 重命名
  mv v3.0.1.tar.gz cphalcon-3.0.1.tar.gz

  #解压
  tar -zxvf cphalcon-3.0.1.tar.gz

  #切换目录(根据php版本和操作系统位数切换到相应的目录)
  cd cphalcon-3.0.1/build/php7/64bits/

  #准备环境(通过find / -name phpize命令可查找出phpize的完整路径)
  /usr/local/php/bin/phpize

  #编译(通过find / -name php-config命令可查找出php-config的完整路径)
  ./configure --with-php-config=/usr/local/php/bin/php-config

  #安装
  make && make install

编译安装成功之后,在"php.ini"的末尾引入扩展

    extension=phalcon.so

重启php-fpm即可。

若在云服务器上安装失败或者卡住,可参考此博文:云服务器编译安装phalcon失败

查看全文 >
2017
01-05

PhalconCMS源码解析之多模块

在2016年的最后一天里,把PhalconCMS 1.0版完成开发、封版并上线部署之后,我一直在想是否需要整理一个源码解析类的系列教程。虽然PhalconCMS的源码组织并不是很复杂,稍微有点Phalcon基础的同学就能看明白,但是很多刚入门的同学对于Phalcon的知识点都是一知半解的状态,并没有一个系统的认知。所以我还是决定写PhalconCMS源码解析这个系列教程,跟大家分享我在学习使用Phalcon以及开发PhalconCMS的过程中的一些经验和总结。一方面呢,我自身对于Phalcon知识点的理解和总结,也不是非常的系统和全面,也是希望借助这个机会,能和更多的Phalcon爱好者互相交流学习;另一方面也是希望能给刚接触Phalcon的同学一些启发,帮助他们少走弯路。希望不会是误人歧途 :)

这一篇跟大家分享一下PhalconCMS多模块的代码组织。在PhalconCMS中有“前台(app/frontend目录)”和“后台(app/backend目录)”两个模块,分别对应着访客和管理员的用户群体。下面直接通过代码来分析。


多模块文件加载

在“app/core/loader.php”文件中,对“前台模块”和“后台模块”的“controllers”、“models”文件目录进行加载。这里是用的命名空间加载(registerNamespaces)方式,也可以用自动加载(registerDirs)来处理。

查看全文 >
2016
12-31

PhalconCMS 1.0发布啦~~

一直都计划着用phalcon来开发一套博客系统 。一来是替换我这个博客站原来的程序,二来也是想为phalcon的开源事业做点贡献。许多接触phalcon的玩家,因为中文资料少、入门门槛高,以及可供参考参照学习的开源项目少,直接从入门到放弃,去学习其他框架了。希望这套博客系统,能为大家在学习phalcon的路上,提供些许帮助~

这套博客系统的名字叫PhalconCMS。我也没想出什么特别好听且有寓意的名字,所以暂且就叫PhalconCMS吧。目前是1.0版本,已经在我这个博客站里进行了部署。这个版本只实现了博客系统基本的内容管理和展现,通俗点说就是一些CRUD操作和缓存处理,没有实现插件机制、主题机制、用户权限体系等等相对复杂点的功能。这些东西,在后面的版本中,我再逐步迭代添加。

下面介绍一下PhalconCMS的安装

推荐环境

  • PHP 5.6+
  • mysql 5.6+
  • phalcon 3.0+
查看全文 >
2016
02-18

依赖注入和控制反转是什么?

年前,@绵阳飞在群里发起了一个讨论,依赖注入和控制反转到底是什么?
我之前对依赖注入和控制反转也不甚理解,直至在学习Phalcon框架的过程中,发现在Phalcon文档中有一个篇幅通过代码示例的方式专门描述了依赖注入的原理。本文打算通过此文档中的代码示例来讲解什么是依赖注入(DI)和控制反转(IoC)。通过示例代码,来更加深入的了解这些概念。

接下来的例子有些长,但解释了为什么我们要使用依赖注入。所以绝对都是干货,请耐心读完,必会有所收获。

依赖的产生

首先,假设我们正在开发一个组件,叫SomeComponent,它需要执行的内容现在还不重要。 但是我们的组件需要依赖数据库连接。

<?php

class SomeComponent
{
    /**
     * 数据库连接是被写死在组件的内部
     * 因此,我们很难从外部替换或者改变它的行为
     */
    public function someDbTask()
    {
        $connection = new Connection(
            array(
                "host"     => "localhost",
                "username" => "root",
                "password" => "secret",
                "dbname"   => "invo"
            )
        );

        // ...
    }
}

$some = new SomeComponent();
$some->someDbTask();

从上面这个例子中,可以看到数据库连接是在组件内部建立的。在我们日常开发中,类似这样的依赖关系在项目中非常常见。但是这种方法其实是不太实用的;我们不能改变创建数据库连接的参数或者选择不同的数据库系统,因为数据库连接是在组件被创建时建立的。

查看全文 >
2016
01-08

memcache和memcached的区别

前两天,大家在群里讨论memcache缓存时,有群友提到了在memcache中如何存储数组,并如何直接通过数组索引取值的问题?当时,大家的回答基本一致是memcache是key-value形式的内存缓存系统。对于缓存key,只能是string类型,而无法存储array类型的key。虽然大家的理解基本保持一致,但是本着求证的态度,我还是查阅了php官方文档。官方示例代码如下:

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$items = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
);
$m->setMulti($items);
$result = $m->getMulti(array('key1', 'key3', 'badkey'), $cas);
var_dump($result, $cas);
?>

以上代码的输出如下:

array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key3"]=>
  string(6) "value3"
}
array(2) {
  ["key1"]=>
  float(2360)
  ["key3"]=>
  float(2362)
}

Memcached::setMulti()类似于Memcached::set(),它是一次存储多个key/value元素,以便于对多个元素的操作。之前我理解为key可以是array数组,但实际上并不是。setMulti()方法相当于是多次调用set()方法存储数据。在这里谢谢@乌大湿的指点。群友的问题暂时无解,那代码中的memcached和我们平常认知的memcache有何不同?

查看全文 >
2015
12-13

云服务器编译安装phalcon失败

这两天萌生想法,想做一个自己的东西。在框架选型方面,打算用Phalcon框架。一方面是上手这个框架已经三年多时间了,顺手且轻车熟路;另一方面,也是在公司大大小小的项目中经受住了洗礼。初步选型既已经确定,就即刻开始环境的准备。既然是自己的小项目,那就用自己的阿里云服务器(ECS)。
这里先简单列下ECS的配置:

1核CPU+1G内存 64位centos

问题起因

下面开始Phalcon框架的编译安装。

#下载phalcon 2.0.9安装文件
wget https://github.com/phalcon/cphalcon/archive/phalcon-v2.0.9.tar.gz

#解压phalcon 2.0.9安装文件 
tar -zxvf phalcon-v2.0.9.tar.gz
cd cphalcon-phalcon-v2.0.9/build/

#执行安装脚本
./install

在脚本执行到“make”步骤时,报错:

gcc: Internal error: Killed (program cc1)


查看全文 >
2015
11-20

phpstorm识别Phalcon语法及提示

在开发Phalcon相关项目时,phpstorm编辑器并没有Phalcon相关语法的自动提示,相对影响开发效率。下面来介绍如何让phpstorm支持对Phalcon语法的自动提示。

1、下载phalcon-devtools包

https://github.com/phalcon/phalcon-devtools 下载phalcon-devtools,并解压到任意目录。

2、phpstorm导入Phalcon库

1.png

查看全文 >
2015
09-03

PHP魔术方法之__set()和__get()

先来看一段代码:

class Article{
    //私有成员属性
    private $title = '标题';

    //受保护的成员属性
    protected $author = '作者';

    //公有成员属性
    public $introduce = '简介';
}

$article = new Article();
var_dump($article -> title);
var_dump($article -> author);
var_dump($article -> introduce);

对象直接访问类中的private和protected成员属性时,会报一个Fatal error的错误,提示“Cannot access private property”或者“Cannot access protected property”。


1、魔术方法__get()

如果对象要直接访问类中的private和protected成员属性呢?
PHP给我们提供了一个魔术方法“__get()”,用于获取private和protected成员属性。

class Article{

    //私有成员属性
    private $title = '标题';

    //受保护的成员属性
    protected $author = '作者';

    //公有成员属性
    public $introduce = '简介';

    //获取private和protected成员属性
    public function __get($name){·
        if(isset($this -> $name)) {
            return $this->$name;
        }
        return false;
    }

}

$article = new Article();
var_dump($article -> title);
var_dump($article -> author);
var_dump($article -> introduce);
查看全文 >
2015
03-19

Phalcon调试大杀器之phalcon-debugbar安装 HOT

Phalcon 是一款非常火的高性能C扩展php开发框架。特点是高性能低耦合,但遗憾的是长期缺少一款得力的调试辅助工具。

感谢作者“老朱”,现在phalcon也有了专属的debug工具: Phalcon Debugbar。从今天起phalcon开发者们再也不用羡慕Zf,Laravel,Ci等集成了php debug bar的框架,因为phalcon已经正式成为了其中一员。目前版本主要以Laravel debugbar的具有功能为蓝本开发,并针对phalcon的功能特征进行了小幅更改,未来版本还将针对phalcon的功能进行进一步扩展丰富。项目地址:http://git.oschina.net/zhuyajie/phalcon-debugbar

readme.md中只是粗略的介绍了phalcon-debugbar的安装方式,新学者可能很难理解其中的安装步骤,Marser下面将给大家介绍下详尽的安装步骤。


1、安装composer

composer是PHP用来管理依赖(dependency)关系的工具。可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮助安装这些依赖的库文件。安装命令如下:

cd /usr/local/src
curl -sS https://getcomposer.org/installer | php
#移动目录,进行全局安装
mv composer.phar /usr/local/bin/composer
查看全文 >
微信扫一扫