zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然 PHP开发学习:面向对象

    <?php
    class Site {
      /* 成员变量 */
      var $url;
      var $title;
      
      /* 成员函数 */
      function setUrl($par){
         $this->url = $par;
      }
      
      function getUrl(){
         echo $this->url . PHP_EOL;
      }
      
      function setTitle($par){
         $this->title = $par;
      }
      
      function getTitle(){
         echo $this->title . PHP_EOL;
      }
    }
    ?>
    $runoob = new Site;
    $taobao = new Site;
    $google = new Site;
    // 调用成员函数,设置标题和URL
    $runoob->setTitle( "菜鸟教程" );
    $taobao->setTitle( "淘宝" );
    $google->setTitle( "Google 搜索" );
    
    $runoob->setUrl( 'www.runoob.com' );
    $taobao->setUrl( 'www.taobao.com' );
    $google->setUrl( 'www.google.com' );
    
    // 调用成员函数,获取标题和URL
    $runoob->getTitle();
    $taobao->getTitle();
    $google->getTitle();
    
    $runoob->getUrl();
    $taobao->getUrl();
    $google->getUrl();
    <?php 
    class Site { 
      /* 成员变量 */ 
      var $url; 
      var $title; 
       
      /* 成员函数 */ 
      function setUrl($par){ 
         $this->url = $par; 
      } 
       
      function getUrl(){ 
         echo $this->url . PHP_EOL; 
      } 
       
      function setTitle($par){ 
         $this->title = $par; 
      } 
       
      function getTitle(){ 
         echo $this->title . PHP_EOL; 
      } 
    } 
    
    $runoob = new Site; 
    $taobao = new Site; 
    $google = new Site; 
    
    // 调用成员函数,设置标题和URL 
    $runoob->setTitle( "菜鸟教程" ); 
    $taobao->setTitle( "淘宝" ); 
    $google->setTitle( "Google 搜索" ); 
    
    $runoob->setUrl( 'www.runoob.com' ); 
    $taobao->setUrl( 'www.taobao.com' ); 
    $google->setUrl( 'www.google.com' ); 
    
    // 调用成员函数,获取标题和URL 
    $runoob->getTitle(); 
    $taobao->getTitle(); 
    $google->getTitle(); 
    
    $runoob->getUrl(); 
    $taobao->getUrl(); 
    $google->getUrl(); 
    ?>

    function __construct( $par1, $par2 ) {
       $this->url = $par1;
       $this->title = $par2;
    }
    $runoob = new Site('www.runoob.com', '菜鸟教程'); 
    $taobao = new Site('www.taobao.com', '淘宝'); 
    $google = new Site('www.google.com', 'Google 搜索'); 
    
    // 调用成员函数,获取标题和URL 
    $runoob->getTitle(); 
    $taobao->getTitle(); 
    $google->getTitle(); 
    
    $runoob->getUrl(); 
    $taobao->getUrl(); 
    $google->getUrl();
    <?php
    class MyDestructableClass {
       function __construct() {
           print "构造函数
    ";
           $this->name = "MyDestructableClass";
       }
    
       function __destruct() {
           print "销毁 " . $this->name . "
    ";
       }
    }
    
    $obj = new MyDestructableClass();
    ?>

    <?php 
    // 子类扩展站点类别
    class Child_Site extends Site {
       var $category;
    
        function setCate($par){
            $this->category = $par;
        }
      
        function getCate(){
            echo $this->category . PHP_EOL;
        }
    }
    function getUrl() {
       echo $this->url . PHP_EOL;
       return $this->url;
    }
       
    function getTitle(){
       echo $this->title . PHP_EOL;
       return $this->title;
    }
    <?php
    /**
     * Define MyClass
     */
    class MyClass
    {
        public $public = 'Public';
        protected $protected = 'Protected';
        private $private = 'Private';
    
        function printHello()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }
    
    $obj = new MyClass();
    echo $obj->public; // 这行能被正常执行
    echo $obj->protected; // 这行会产生一个致命错误
    echo $obj->private; // 这行也会产生一个致命错误
    $obj->printHello(); // 输出 Public、Protected 和 Private
    
    
    /**
     * Define MyClass2
     */
    class MyClass2 extends MyClass
    {
        // 可以对 public 和 protected 进行重定义,但 private 而不能
        protected $protected = 'Protected2';
    
        function printHello()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }
    
    $obj2 = new MyClass2();
    echo $obj2->public; // 这行能被正常执行
    echo $obj2->private; // 未定义 private
    echo $obj2->protected; // 这行会产生一个致命错误
    $obj2->printHello(); // 输出 Public、Protected2 和 Undefined
    
    ?>
    <?php
    /**
     * Define MyClass
     */
    class MyClass
    {
        // 声明一个公有的构造函数
        public function __construct() { }
    
        // 声明一个公有的方法
        public function MyPublic() { }
    
        // 声明一个受保护的方法
        protected function MyProtected() { }
    
        // 声明一个私有的方法
        private function MyPrivate() { }
    
        // 此方法为公有
        function Foo()
        {
            $this->MyPublic();
            $this->MyProtected();
            $this->MyPrivate();
        }
    }
    
    $myclass = new MyClass;
    $myclass->MyPublic(); // 这行能被正常执行
    $myclass->MyProtected(); // 这行会产生一个致命错误
    $myclass->MyPrivate(); // 这行会产生一个致命错误
    $myclass->Foo(); // 公有,受保护,私有都可以执行
    
    
    /**
     * Define MyClass2
     */
    class MyClass2 extends MyClass
    {
        // 此方法为公有
        function Foo2()
        {
            $this->MyPublic();
            $this->MyProtected();
            $this->MyPrivate(); // 这行会产生一个致命错误
        }
    }
    
    $myclass2 = new MyClass2;
    $myclass2->MyPublic(); // 这行能被正常执行
    $myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行
    
    class Bar 
    {
        public function test() {
            $this->testPrivate();
            $this->testPublic();
        }
    
        public function testPublic() {
            echo "Bar::testPublic
    ";
        }
        
        private function testPrivate() {
            echo "Bar::testPrivate
    ";
        }
    }
    
    class Foo extends Bar 
    {
        public function testPublic() {
            echo "Foo::testPublic
    ";
        }
        
        private function testPrivate() {
            echo "Foo::testPrivate
    ";
        }
    }
    
    $myFoo = new foo();
    $myFoo->test(); // Bar::testPrivate 
                    // Foo::testPublic
    ?>
    <?php
    
    // 声明一个'iTemplate'接口
    interface iTemplate
    {
        public function setVariable($name, $var);
        public function getHtml($template);
    }
    
    
    // 实现接口
    class Template implements iTemplate
    {
        private $vars = array();
      
        public function setVariable($name, $var)
        {
            $this->vars[$name] = $var;
        }
      
        public function getHtml($template)
        {
            foreach($this->vars as $name => $value) {
                $template = str_replace('{' . $name . '}', $value, $template);
            }
     
            return $template;
        }
    }
    <?php
    class MyClass
    {
        const constant = '常量值';
    
        function showConstant() {
            echo  self::constant . PHP_EOL;
        }
    }
    
    echo MyClass::constant . PHP_EOL;
    
    $classname = "MyClass";
    echo $classname::constant . PHP_EOL; // 自 5.3.0 起
    
    $class = new MyClass();
    $class->showConstant();
    
    echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
    ?>
    <?php
    abstract class AbstractClass
    {
     // 强制要求子类定义这些方法
        abstract protected function getValue();
        abstract protected function prefixValue($prefix);
    
        // 普通方法(非抽象方法)
        public function printOut() {
            print $this->getValue() . PHP_EOL;
        }
    }
    
    class ConcreteClass1 extends AbstractClass
    {
        protected function getValue() {
            return "ConcreteClass1";
        }
    
        public function prefixValue($prefix) {
            return "{$prefix}ConcreteClass1";
        }
    }
    
    class ConcreteClass2 extends AbstractClass
    {
        public function getValue() {
            return "ConcreteClass2";
        }
    
        public function prefixValue($prefix) {
            return "{$prefix}ConcreteClass2";
        }
    }
    
    $class1 = new ConcreteClass1;
    $class1->printOut();
    echo $class1->prefixValue('FOO_') . PHP_EOL;
    
    $class2 = new ConcreteClass2;
    $class2->printOut();
    echo $class2->prefixValue('FOO_') . PHP_EOL;
    ?>

    <?php
    abstract class AbstractClass
    {
        // 我们的抽象方法仅需要定义需要的参数
        abstract protected function prefixName($name);
    
    }
    
    class ConcreteClass extends AbstractClass
    {
    
        // 我们的子类可以定义父类签名中不存在的可选参数
        public function prefixName($name, $separator = ".") {
            if ($name == "Pacman") {
                $prefix = "Mr";
            } elseif ($name == "Pacwoman") {
                $prefix = "Mrs";
            } else {
                $prefix = "";
            }
            return "{$prefix}{$separator} {$name}";
        }
    }
    
    $class = new ConcreteClass;
    echo $class->prefixName("Pacman"), "
    ";
    echo $class->prefixName("Pacwoman"), "
    ";
    ?>

    <?php
    class Foo {
      public static $my_static = 'foo';
      
      public function staticValue() {
         return self::$my_static;
      }
    }
    
    print Foo::$my_static . PHP_EOL;
    $foo = new Foo();
    
    print $foo->staticValue() . PHP_EOL;
    ?>    

    <?php
    class BaseClass {
       public function test() {
           echo "BaseClass::test() called" . PHP_EOL;
       }
       
       final public function moreTesting() {
           echo "BaseClass::moreTesting() called"  . PHP_EOL;
       }
    }
    
    class ChildClass extends BaseClass {
       public function moreTesting() {
           echo "ChildClass::moreTesting() called"  . PHP_EOL;
       }
    }
    // 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
    ?>
    <?php
    class BaseClass {
       function __construct() {
           print "BaseClass 类中构造方法" . PHP_EOL;
       }
    }
    class SubClass extends BaseClass {
       function __construct() {
           parent::__construct();  // 子类构造方法不能自动调用父类的构造方法
           print "SubClass 类中构造方法" . PHP_EOL;
       }
    }
    class OtherSubClass extends BaseClass {
        // 继承 BaseClass 的构造方法
    }
    
    // 调用 BaseClass 构造方法
    $obj = new BaseClass();
    
    // 调用 BaseClass、SubClass 构造方法
    $obj = new SubClass();
    
    // 调用 BaseClass 构造方法
    $obj = new OtherSubClass();
    ?>

  • 相关阅读:
    317 随笔
    316 随笔
    315 随笔
    python 第一章
    matlab 第四章 第一节 字符串 元胞
    matlab 第三章 第二节 多维数组
    matlab 第三章
    python 循环+break continue
    Springboot 教程 导入
    matlab 第二章 第三节 数值表示、变量及表达式
  • 原文地址:https://www.cnblogs.com/tszr/p/10947797.html
Copyright © 2011-2022 走看看