首页 \ 问答 \ 实现单例模式时出错(Error in Implementing singleton pattern)

实现单例模式时出错(Error in Implementing singleton pattern)

我试图实现单例模式,我得到以下错误

致命错误:Database :: __ construct()的访问级别必须在29行的/config/database.php中公开(如类PDO中所示)

<?php

class Database extends PDO
{
    private static $instance;

    private function __construct()
    {

            return parent::__construct(
                    "mysql:host=localhost;dbname=live",
                    "root",
                    "root"
            );

    }

    public function getInstance() {
        if(self::$instance === null) {
            self::$instance = new Database();
        }
        return self::$instance;
    }

    public function __clone() 
    {
        die(__CLASS__ . ' class cant be instantiated. Please use the method called getInstance.');
    }
}


$mySingleton = Database::getInstance();

var_dump($mySingleton);

?>

I am trying to implement singleton pattern and i am getting the following error

Fatal error: Access level to Database::__construct() must be public (as in class PDO) in /config/database.php on line 29

<?php

class Database extends PDO
{
    private static $instance;

    private function __construct()
    {

            return parent::__construct(
                    "mysql:host=localhost;dbname=live",
                    "root",
                    "root"
            );

    }

    public function getInstance() {
        if(self::$instance === null) {
            self::$instance = new Database();
        }
        return self::$instance;
    }

    public function __clone() 
    {
        die(__CLASS__ . ' class cant be instantiated. Please use the method called getInstance.');
    }
}


$mySingleton = Database::getInstance();

var_dump($mySingleton);

?>

原文:https://stackoverflow.com/questions/9656382
更新时间:2024-02-25 18:02

最满意答案

您可以尝试以下代码:希望这可以帮助您 -

菜单项的数据由MenuItem类表示

public class MenuItem {
    private int id;
    private String label;

    public MenuItem(String label, int id) {
       super();
       this.label = label;
       this.id = id;
    }

    public int getId() {
       return this.id;
    }

    public String getLabel() {
       return this.label;
    }

    public void setId(int id) {
       this.id = id;
    }

    public void setLabel(String label) {
       this.label = label;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("MenuItem [id=");
        builder.append(this.id);
        builder.append(", label=");
        builder.append(this.label);
        builder.append("]");
        return builder.toString();
    }
 }

DynamicMenu类支持动态菜单。 它提供了菜单项列表和操作方法:

import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.seam.annotations.Name;

@Name("dynMenu")
public class DynamicMenu {

    private Logger log = Logger.getLogger(DynamicMenu.class.getName());

    public void action(int id) {
        log.info("Action called with menu item id: " + id);
    }

    public List<menuitem> getMenuItems() {

        List<menuitem> menuItems = new ArrayList<menuitem>();

        menuItems.add(new MenuItem("Menu Item #1", 1));
        menuItems.add(new MenuItem("Menu Item #2", 2));
        menuItems.add(new MenuItem("Menu Item #3", 3));

        return menuItems;
    }
}

以下代码段包含动态菜单xhtml示例。 动态菜单项中的键是<c:forEach>迭代器。 名称空间声明非常重要,它应该是xmlns:c="http://java.sun.com/jstl/core" 。 如果你使用xmlns:c="http://java.sun.com/jsp/jstl/core"命名空间,迭代器将无法正常工作!

<h:form xmlns:h="http://java.sun.com/jsf/html">
    <rich:dropDownMenu value="Dynamic Menu Item Example" style="text-decoration:none;">
        <c:forEach xmlns:c="http://java.sun.com/jstl/core" var="item" 
                                        items="#{dynMenu.getMenuItems()}">

            <rich:menuItem id="menuItem#{item.id}" submitMode="ajax"
                    value="#{item.label}" action="#{dynMenu.action(item.id)}">
            </rich:menuItem>
        </c:forEach>
    </rich:dropDownMenu>
</h:form>


You may try the below piece of code: Hope this will help you-

The data of a menu item is represented by the MenuItem class

public class MenuItem {
    private int id;
    private String label;

    public MenuItem(String label, int id) {
       super();
       this.label = label;
       this.id = id;
    }

    public int getId() {
       return this.id;
    }

    public String getLabel() {
       return this.label;
    }

    public void setId(int id) {
       this.id = id;
    }

    public void setLabel(String label) {
       this.label = label;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("MenuItem [id=");
        builder.append(this.id);
        builder.append(", label=");
        builder.append(this.label);
        builder.append("]");
        return builder.toString();
    }
 }

The dynamic menu is supported by the DynamicMenu class. It provides the list of menu items and an action method:

import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.seam.annotations.Name;

@Name("dynMenu")
public class DynamicMenu {

    private Logger log = Logger.getLogger(DynamicMenu.class.getName());

    public void action(int id) {
        log.info("Action called with menu item id: " + id);
    }

    public List<menuitem> getMenuItems() {

        List<menuitem> menuItems = new ArrayList<menuitem>();

        menuItems.add(new MenuItem("Menu Item #1", 1));
        menuItems.add(new MenuItem("Menu Item #2", 2));
        menuItems.add(new MenuItem("Menu Item #3", 3));

        return menuItems;
    }
}

The following code snippet contains the dynamic menu xhtml example. The key in the dynamic menu items is the <c:forEach> iterator. The namespace declaration is very important, it should be xmlns:c="http://java.sun.com/jstl/core". If you use xmlns:c="http://java.sun.com/jsp/jstl/core" namespace, the iterator won't work!

<h:form xmlns:h="http://java.sun.com/jsf/html">
    <rich:dropDownMenu value="Dynamic Menu Item Example" style="text-decoration:none;">
        <c:forEach xmlns:c="http://java.sun.com/jstl/core" var="item" 
                                        items="#{dynMenu.getMenuItems()}">

            <rich:menuItem id="menuItem#{item.id}" submitMode="ajax"
                    value="#{item.label}" action="#{dynMenu.action(item.id)}">
            </rich:menuItem>
        </c:forEach>
    </rich:dropDownMenu>
</h:form>

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。