public PropertyResult addProperty(PropertyEntity property) {
        PropertyResult result = new PropertyResult();
        PropertyEntity prototype = null;

        if (property.isStatic()) {
            prototype = staticProperties.get(property.getLowerName());
            if (prototype != null && prototype.getModifier() != property.getModifier()) {
                property.setPrototype(prototype);
            }

            if (prototype == null)
                prototype = properties.get(property.getName());

            staticProperties.put(property.getName(), property);
        } else {
            prototype = properties.get(property.getLowerName());
            if (prototype != null && prototype.getModifier() != property.getModifier()) {
                property.setPrototype(prototype);
            }

            if (prototype == null)
                prototype = staticProperties.get(property.getName());

            properties.put(property.getName(), property);
        }

        if (prototype != null) {
            if (property.getPrototype() != null) {
                if (prototype.isProtected() && property.isPrivate()) {
                    result.addError(Kind.MUST_BE_PROTECTED, property);
                }

                if (prototype.isPublic() && !property.isPublic()) {
                    result.addError(Kind.MUST_BE_PUBLIC, property);
                }
            }

            if (!prototype.isPrivate()) {
                if (property.isTyped() && !prototype.isTyped()) {
                    property.setPrototype(prototype);
                    result.addError(Kind.TYPE_MUST_BE_NOT_DEFINED, property);
                } else {
                    if (prototype.isTyped() && !prototype.getTypeChecker().identical(property.getTypeChecker())) {
                        property.setPrototype(prototype);
                        result.addError(Kind.INVALID_TYPE, property);
                    }
                }
            }

            boolean overridden = property.modifier.ordinal() > prototype.modifier.ordinal();
            if (!property.isPrivate() && property.modifier == prototype.modifier)
                overridden = true;
            if (property.isPublic() && prototype.isProtected())
                overridden = true;

            if (prototype.isStatic() && !property.isStatic()) {
                if (overridden) {
                    property.setPrototype(prototype);
                    result.addError(Kind.STATIC_AS_NON_STATIC, property);
                }
            } else if (property.isStatic() && !prototype.isStatic()) {
                if (overridden) {
                    property.setPrototype(prototype);
                    result.addError(Kind.NON_STATIC_AS_STATIC, property);
                }
            }
        }

        property.setClazz(this);
        return result;
    }
return empty list if success else list with not valid implemented methods in class

@param _interface
@return
jphp-runtime/src/php/runtime/reflection/ClassEntity.java