CI框架 一个方法如何调用另一个方法的变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI框架 一个方法如何调用另一个方法的变量相关的知识,希望对你有一定的参考价值。
<?php
class Header extends CI_Controller
public $name = null;
public function __construct()
parent::__construct();
public function index()
$name=$this->input->post('name');
$this->name = $name;
$pass=$this->input->post('pass');
if($name!=''&&$pass!='')
$this->load->database();
$query = $this->db->query("SELECT * FROM user WHERE a='".$name."' && b='".$pass."'");
if ($query->num_rows() > 0)
$this->load->view("view02");
else
$this->load->view("view01");
else$this->load->view("view01");
public function news()
$this->load->view("view02");
public function lyb()
echo 'hello word';
echo $this->name;
?>
我想在 方法lyb()中调用方法Index()中的变量 $name 和pass 如何写代码 ,感谢 ,最好详细点
防止一个方法在另一个方法之前被调用
【中文标题】防止一个方法在另一个方法之前被调用【英文标题】:Preventing a method being called before another one 【发布时间】:2012-08-21 01:32:25 【问题描述】:这个问题有点宽泛和概念化。
我有一堂有各种方法的课。我们称他们为A
和B
。如何确保将来使用此类的其他开发人员在第一次调用方法 A 之前不会调用方法 B 至少一次?
我在 C++ 中执行此操作,但一般而言,执行此操作的最佳方法是什么?我有一些天真的想法,例如使用布尔变量,但我也想听听其他一些想法。
【问题讨论】:
您无法真正执行订单(您已经提到了解决方案)。您可以使用模板模式重新设计并避免这种特殊需要。 en.wikipedia.org/wiki/Template_method_pattern 【参考方案1】:保证这一点的一种方法?让方法 B 负责调用方法 A 一次。
其他任何东西都是脆弱的 API。
【讨论】:
这是一个好主意(+1),请注意,这样做的一个缺点是调用 A 所需的所有信息都必须传递给 B - 这可能很糟糕。 (想象一下需要将所有数据库连接数据传递给每个查询......) 另外,“唯一的方式”有点强 IMO。【参考方案2】:有一个布尔变量来确定A
是否已被调用。然后,当有人尝试调用 B
而不设置此布尔变量时,抛出 IllegalStateException。
或者你可以让B
简单地调用A
,因为它似乎无法在没有首先调用A
的情况下执行。
否则,由于这两种方法都是公开的,因此实际上没有其他方法可以强制执行此操作。
【讨论】:
【参考方案3】:使用布尔值是一个好的开始,并且抛出访问也可以。
但有时能够在编译时强制执行这一点很不错。在这种情况下,您唯一真正的选择是使用一些技巧。
只在你的类中公开 A,让它返回一个包含 B 的代理。
class MyClass
public:
struct BProxy
public:
MyClass * root;
void B() root->B();
protected:
BProxy( MyClass * self ) : root(self) ; // Disable construction
friend class MyClass; //So that MyClass can construct it
;
BProxy A() ... return BProxy(this);
friend class BProxy; // So that BProxy can call B()
protected
void B() ...
;
int main()
MyClass m;
BProxy bp = m.A();
// m.B(); can't do this as it's private - will fail at compile time.
bp.B(); // Can do this as we've got the proxy from our previous call to A.
您还可以使用从实现(或提供虚拟)B() 的基类的受保护继承来实现类似的功能。
【讨论】:
【参考方案4】:一种方法是稍微不同地重新设计您的课程。考虑一个在使用前需要初始化的简单数据库类。我是 Java 人,所以...
public class Database
public void init(String username, String password) // must call this first!
public List<Object> runQuery(String sql) // ...
所以我需要先调用 init。我可以创建一个进行初始化并返回实际数据库对象的 DatabaseFactory。我们可以隐藏构造函数,以便只有 DatabaseFactory 可以创建数据库(在 Java 中是嵌套类,在 C++ 中可能是友元类?)。
public class DatabaseFactory
public Database init(String username, String password) // ...
public class Database
private Database()
public List<Object> runQuery(String sql) // ...
所以现在我必须通过工厂才能到达底层对象。
DatabaseFactory factory = new DatabaseFactory();
Database database = factory.init("username", "password"); // first init (call method A)
// now I can use database (or B in your case)
database.runQuery("select * from table");
【讨论】:
【参考方案5】:保证它的一种方法是A
在类的构造函数中完成。如果构造函数失败(抛出),那么其他开发人员将不知道该怎么做那个错误的B
。如果构造函数成功,则 A
至少执行一次,因此 B
是有效的操作。
【讨论】:
【参考方案6】:我会将方法“A”作为构造函数来初始化对象。这必须调用一次才能使用由编译器强制执行的对象。稍后您可以在知道必须调用构造函数的情况下调用方法“B”。
【讨论】:
以上是关于CI框架 一个方法如何调用另一个方法的变量的主要内容,如果未能解决你的问题,请参考以下文章