【澳门葡京备用网址】php静态变量与方式与phar的应用,飞快建立多个目标

本节用类与静态变量改造从前的事例:php依照命令行参数生成配置文件

前言

PHP 中的数组(尤其关联数组)是平时利用的 ——
因为便宜。在有些框架中也常常见到重临数组格式的布署参数。可是稍微时候只怕必要对象而非数组类型的配置参数,在查看网络资料后找到了主意,作以记录。

 

前言

PHP 中的数组(尤其关联数组)是常事使用的 ——
因为便宜。在一些框架中也时时来看重临数组格式的安插参数。不过稍微时候或许需求对象而非数组类型的布局参数,在查看互连网资料后找到了艺术,作以记录。

 

正文实例讲述了PHP中STDCLASS用法。分享给大家供咱们参考,具体如下:

ghostinit.php:

1. 恫吓转换

$arr = [
    'appid' => '121434352',
    'appkey' => '19b8b372c501e1fbedead782d46199a',
    'callback' => 'http://example.com/callback.php',
    'scope' => 'add_t,add_pic_t,del_t',
    'errorReport' => true,
    'storageType' => 'file',
    'host' => 'localhost',
    'user' => 'root',
    'password' => 'root',
    'database' => 'test'
];
$obj = (Object)($arr);

  

1. 威迫转换

$arr = [
    'appid' => '121434352',
    'appkey' => '19b8b372c501e1fbedead782d46199a',
    'callback' => 'http://example.com/callback.php',
    'scope' => 'add_t,add_pic_t,del_t',
    'errorReport' => true,
    'storageType' => 'file',
    'host' => 'localhost',
    'user' => 'root',
    'password' => 'root',
    'database' => 'test'
];
$obj = (Object)($arr);

  

PHP中STDCLASS在大家开发应用中拔取到的不多,但是PHP中STDCLASS效率是卓殊的大的,下边大家一并来看PHP中STDCLASS的用法.

<?php

    class ghostinit{
        static $version = 'ghost version is 1.1';
        static $projName = '';
        static $author = 'ghostwu';
        static function init(){
            echo "pls input project name?" . PHP_EOL;
            self::$projName = fgets( STDIN );

            echo "pls input author?" . PHP_EOL;
            self::$author = fgets( STDIN );

            echo "您输入的项目信息如下:" . PHP_EOL;
            echo self::$projName . PHP_EOL;
            echo self::$author . PHP_EOL;
        }    

        static function make(){
            $pchar=new Phar("ghost.phar");
            $pchar->buildFromDirectory(dirname(__FILE__));
            $pchar->setStub($pchar->createDefaultStub('ghost'));
            $pchar->compressFiles(Phar::GZ);        
        }
    }

?>

2. stdClass类

stdClass 是 PHP
的三个基类,大致所有的类都继承了这几个类,所以任几时候都可以被
new,让这么些变量成为1个 Object。同时,实例化之后的 stdClass
是从未有过别的性质和格局的,也等于壹个空对象。

$obj = new stdClass;
$obj->appid = '121634752';
$obj->appkey = '09bab3721ce171fbed314782d46199a';
$obj->callback = 'http://example.com/callback.php';
$obj->scope = 'add_t,add_pic_t,del_t';
$obj->errorReport = true;
$obj->storageType = 'file';
$obj->host = 'localhost';
$obj->user = 'root';
$obj->password = '';
$obj->database = 'test';

  

参考链接:

转]【澳门葡京备用网址】php静态变量与方式与phar的应用,飞快建立多个目标。
php“对象,数组”相互转换

PHP中的stdClass
【转】

2. stdClass类

stdClass 是 PHP
的壹个基类,大约所有的类都继承了那几个类,所以任曾几何时候都足以被
new,让这么些变量成为1个 Object。同时,实例化之后的 stdClass
是没有其余性质和艺术的,也等于壹个空对象。

$obj = new stdClass;
$obj->appid = '121634752';
$obj->appkey = '09bab3721ce171fbed314782d46199a';
$obj->callback = 'http://example.com/callback.php';
$obj->scope = 'add_t,add_pic_t,del_t';
$obj->errorReport = true;
$obj->storageType = 'file';
$obj->host = 'localhost';
$obj->user = 'root';
$obj->password = '';
$obj->database = 'test';

  

参考链接:

转]
php“对象,数组”互相转换

PHP中的stdClass
【转】

在WordPress中很多地点使用stdClass来定义1个对象(而一般是用数组的法门),然后利用get_object_vars来把定义的目的『转换』成数组.

ghost:

正如代码所示:

#!/usr/bin/php
<?php
require "ghostinit.php";

$result = '';

if( $argc >= 2 ) {
    $argv[1] == '-v' && $result = ghostinit::$version;
    $argv[1] == 'make' && ghostinit::make();
    $argv[1] == 'init' && ghostinit::init();
}

echo $result . PHP_EOL;
$tanteng = new stdClass();
$tanteng->name = 'tanteng';
$tanteng->email = 'xxx@qq.com';
$info = get_object_vars($tanteng);
print_r($info);
exit;

施行结果:

输出:

ghostwu@dev:~/php/php1/3$ ls
done  ghost  ghostinit.php
ghostwu@dev:~/php/php1/3$ ./ghost init
pls input project name?
test
pls input author?
ghostwu
您输入的项目信息如下:
test

ghostwu


ghostwu@dev:~/php/php1/3$ ls
done  ghost  ghostinit.php
ghostwu@dev:~/php/php1/3$ ./ghost make

ghostwu@dev:~/php/php1/3$ ls
done  ghost  ghostinit.php  ghost.phar
ghostwu@dev:~/php/php1/3$ ./ghost -v
ghost version is 1.1
ghostwu@dev:~/php/php1/3$ 
Array ( [name] => tanteng [email] => xxx@qq.com )

 

get_object_vars的效果是回来由对象属性组成的关周到组。它的成效跟这么定义数组其实是均等的:

callstatic继续改造:

$tanteng = array();
$tanteng['name'] = 'tanteng';
$tanteng['email'] = 'xxx@qq.com';

ghostinit.php:

可以这么领会:stdClass是三个内置类,它从不成员变量,也尚未成员方法的一个类,new3个stdClass就是实例化了一个『空』对象,它本人没什么意思,可是用stdClass定义有哪些便宜吗?

<?php

    class ghostinit{
        static $v = 'ghost version is 1.1';
        static $projName = '';
        static $author = 'ghostwu';
        static function init(){
            echo "pls input project name?" . PHP_EOL;
            self::$projName = fgets( STDIN );

            echo "pls input author?" . PHP_EOL;
            self::$author = fgets( STDIN );

            echo "您输入的项目信息如下:" . PHP_EOL;
            echo self::$projName . PHP_EOL;
            echo self::$author . PHP_EOL;
        }    

        static function make(){
            $pchar=new Phar("ghost.phar");
            $pchar->buildFromDirectory(dirname(__FILE__));
            $pchar->setStub($pchar->createDefaultStub('ghost'));
            $pchar->compressFiles(Phar::GZ);        
        }

        static function __callstatic( $m, $args ){
            echo 'error function';
        }

    }

?>

一般来说代码:

ghost:

$user = new stdClass();
$user->name = 'gouki';
$user->hehe = 'hehe';
$myUser = $user;
$myUser->name = 'flypig';
print_r($user);
print_r($myUser);
print_r($user);
#!/usr/bin/php
<?php
require "ghostinit.php";

$result = '';

if( $argc >= 2 ) {
    $p = $argv[1]; 
    if( substr( $p, 0, 1 ) == '-' ) {
        $p = substr( $p, 1 );
        $result = isset( ghostinit::$$p ) ? ghostinit::$$p : 'error';
    }else {
        $result = ghostinit::$p();
    }
}

echo $result . PHP_EOL;

此处$myUser被赋值$user,但实在并从未新开拓一块内存存储变量,$myUser还是指的stdClass那些目的,通过$myUser改变属性页就变更了$user的脾性,并不是新建一个副本,如果程序中有不可胜计那样的操作,使用stdClass的办法得以节约内存费用.

 把布置独立成多个类

运作结果:

ghostconfig.php:   把那三性格情注释,也足以健康运转,
php允许动态增加成员变量(类的属性)

stdClass Object
(
  [name] => flypig
  [hehe] => hehe
)
stdClass Object
(
  [name] => flypig
  [hehe] => hehe
)
stdClass Object
(
  [name] => flypig
  [hehe] => hehe
)
<?php
class ghostconfig{
    public $projName;
    public $author;

}

从结果可以看看,改变$myUser的天性确实改变了$user申明的stdClass属性,而只要$user是3个数组,赋值给$myUser,那就拷贝了3个副本给$myUser,那样增大系统费用.

ghostinit.php

当然,你也得以反过来,把三个数组转换为目的:

<?php
    require( "ghostconfig.php" );    

    class ghostinit{
        static $v = 'ghost version is 1.1';

        static function init(){
            $conf = new ghostconfig();
            echo "pls input project name?" . PHP_EOL;
            $conf->projName = fgets( STDIN );

            echo "pls input author?" . PHP_EOL;
            $conf->author = fgets( STDIN );

            echo "您输入的项目信息如下:" . PHP_EOL;

            echo json_encode( $conf );
        }    

        static function make(){
            $pchar=new Phar("ghost.phar");
            $pchar->buildFromDirectory(dirname(__FILE__));
            $pchar->setStub($pchar->createDefaultStub('ghost'));
            $pchar->compressFiles(Phar::GZ);        
        }

        static function __callstatic( $m, $args ){
            echo 'error function';
        }

    }

?>
$hehe['he1'] = 'he1';
$hehe['he2'] = 'he2';
$hh = (object) $hehe;
print_r($hh);

 利用拔尖类stdClass代替config类,那样就收缩了3个类,那一个config类如今只用到了两遍,完全可以用stdClass再一次简化

澳门葡京备用网址 ,打印结果:

<?php

    class ghostinit{
        static $v = 'ghost version is 1.1';

        static function init(){
            $conf = new stdClass();
            echo "pls input project name?" . PHP_EOL;
            $conf->projName = fgets( STDIN );

            echo "pls input author?" . PHP_EOL;
            $conf->author = fgets( STDIN );

            echo "您输入的项目信息如下:" . PHP_EOL;

            echo json_encode( $conf );
        }    

        static function make(){
            $pchar=new Phar("ghost.phar");
            $pchar->buildFromDirectory(dirname(__FILE__));
            $pchar->setStub($pchar->createDefaultStub('ghost'));
            $pchar->compressFiles(Phar::GZ);        
        }

        static function __callstatic( $m, $args ){
            echo 'error function';
        }

    }

?>
stdClass Object ( [he1] => he1 [he2] => he2 )

 生成配置新闻,再度简化,变成公共模块:

越来越多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法计算》、《PHP网络编程技巧总计》、《PHP数组(Array)操作技能大全》、《php字符串(string)用法计算》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

static function init(){
            echo "pls input project name?" . PHP_EOL;
            $projName = fgets( STDIN );

            echo "pls input author?" . PHP_EOL;
            $author = fgets( STDIN );

            echo "您输入的项目信息如下:" . PHP_EOL;

            echo json_encode( self::getConfig( [ 'proj_name' => $projName, 'author' => $author ] ) );
        }    

        static function getConfig( $conf ){
            $std = new stdClass();
            foreach( $conf as $k => $v ){
                $std->$k = $v;
            }
            return $std;
        }

企望本文所述对大家PHP程序设计具有支持。

 

你或者感兴趣的稿子:

  • PHP标准类(stdclass)用法示例
  • php中stdClass的用法分析
  • PHP中把stdClass
    Object转array的多少个法子
  • 从PHP的源码中浓厚领会stdClass类
  • 理解PHP中的stdClass类
  • PHP5中新增stdClass
    内部保留类
  • PHP中遍历stdclass
    object的落到实处代码
  • PHP 面向对象
    final类与final方法
  • PHP面向对象之旅:深入精通static变量与艺术
  • php面向对象的办法重载二种版本相比
  • PHP使用new
    StdClass()创制空对象的法门分析

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website