Giter Club home page Giter Club logo

Comments (2)

phil-lavin avatar phil-lavin commented on August 28, 2024

I tried it out to be sure I wasn't missing an inadequacy of LSB in php5.3. It seems to work fine for me...

<?php
class Foo {
        protected static $foo = null;

        public static function getFoo() {
                return static::$foo;
        }
}

class Bar extends Foo {
        protected static $foo = 'wah';
}

var_dump(Foo::getFoo());
var_dump(Bar::getFoo());

Output is:
phil@server1:~$ php statictest.php
NULL
string(3) "wah"

from orm.

jschreuder avatar jschreuder commented on August 28, 2024

The problem is as follows: when the parent class has the property but the child class doesn't the parent class's property is used.

Then let's say we have the base Orm\Model and these 2 classes:

<?php

class Orm\Model {
    protected static $foo = 0;
}

class Foo extends Orm\Model {
    public static function getFoo() {
        return static::$foo;
    }
}

class Bar extends Orm\Model {
    public static function getFoo() {
        static::$foo++;
        return static::$foo;
    }
}

Note that these are 2 extension classes for the same base model which has the property, while neither of the child classes has the property.

Foo::getFoo(); // 0
Foo::getFoo(); // 0
Bar::getFoo(); // 1
Bar::getFoo(); // 2

// And now for the big surprise
Foo::getFoo(); // 2

Thus by making the property part of the parent class you MUST extend it or its meaning will be ambiguous. Which is why the solution is used.

[edit] And by the way, not meant to insult you: your use of "OO" is pretty strange to say it kindly. OO isn't a single way of doing things and when talking about static property one might even argue there's nothing OO about it. When you want to argue something don't use the term OO as a magic stick, it's not it has no meaning when used like this. Argue why you think something is good or bad and don't use a term you apparently only half understand and has no meaning in the context in which you use it. (what you meant to say is "inheritance", which of course is part of any OO design but is like using the word fruit when talking about apples)

Last but not least: questions belong on the forums, not the issue tracker.

from orm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.