zoukankan      html  css  js  c++  java
  • PHP 类成员变量规范的一些理解。

    今儿写代码是发现一个问题:

    PHP 类 成员变量不能接受方法得返回值

    做以下测试:

    bin_2.php

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 14-12-4
     * Time: 下午9:45
     */
    header("Content-type:text/html;charset=utf-8");
    require_once('bin_1.php');
    require_once('bin_3.php');
    class bin_2{
        //$bin_3 = new bin_3();
        //$bin_3->getStr_1();
        public $testString ;
        //public $testString_1 = getStr();
        //public $testString_2 = test();
        //public static $testString_3 = self::test_1();
        public function test(){
            echo getStr();
        }
        public static function test_1(){
            return "abc";
        }
    }
     $class =  new bin_2();
     $class->test();

    bin_1.php

     <?php function getStr(){ return "测试成员变量是否能 接受方法返回值"; } ?> 

    bin_3.php

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 14-12-4
     * Time: 下午10:22
     */
    class bin_3{
        function getStr_1(){
            return "abc";
        }
    }

    已上测试出 类成员变量无法赋值为方法得返回值

    但是有点感觉自相矛盾:

    //$bin_3 = new bin_3();

    //$bin_3->getStr_1();

    此处表明类内部,成员方法外部无法实例化对象。但是当一个类实例化得时候,在编译过程中,为何不能实例化另外一个类来对自己来实现一些业务需求呢?也许你会说直接继承该类,但是如果依赖很多个类呢,PHP也不支持多继承。

    //public $testString_1 = getStr();

    成员变量无法使用其他文件得某个方法,这个也说不过去,因为bin_1.php不是一个类,导入进来后,改文件就拥有了bin_1得全部。为何不能使用自己内部的方法为自己变量赋值?就像和构造方法一样,一开始为自己成员变量赋值。不过这样还是有缺点,感觉构造方法这个东西的重要性就远远被削弱,而且造成了代码得难维护性,因为有可能你用了N个这样的方法,但是如果用构造方法,就等于是封装了全部,何乐而不为。
    //public $testString_2 = test();

    不支持调用自身某个方法,这也是能理解的思想,因为在实例化的过程,还是个封闭的过程,只是对象本身,而没被指定任务,譬如调用某某方法等等,所以既然是封闭的,为何不直接等于,而要写成一个方法呢?
    //public static $testString_3 = self::test_1();

    静态变量,无法被自身静态方法赋值,想必这和上面也是一样的意思吧。

    但是在日常代码编写中,也许某个成员变量,要依赖于别的类业务支持,那么我们就乖乖得放在构造方法中。增加代码得可维护性。较高的封装度。

    积累知识,分享知识,学习知识。
  • 相关阅读:
    iOS-SetNeedsLayout,layoutNeeded和layoutSubviews方法之间的关系
    iOS-基础知识-assign,copy,retain,strong,weak的区别
    iOS中单例的两种方法
    iOS-项目国际化
    iOS-项目分析,框架搭建
    iOS-项目远程推送1
    iOS-developer.Apple开发账号操作步骤
    iOS系统办公软件ppt等如何转换windows下可以打开的格式
    iOS-Senior18-第三方初级
    iOS-Senior23-科大讯飞语音识别2
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/4145246.html
Copyright © 2011-2022 走看看