我仍然是PHP的新手,因此我正在尝试了解PHP Web应用程序中的范围概念. 在Java世界中,Java Web应用程序 - 使用Java服务器页面(JSP)和向上 - 将允许Java Bean具有以下范围: 页 请求 会话 应用程序 试图将它们映射到PHP的范围范围功能: 页面:不是真正的,而是在呼叫呼叫后将呼叫本地的对象视为"消失",因此它就像页面范围 请求:使用" $ _request超级全局(不确定这是在哪里... cookies?隐藏字段?url参数?) 会话:使用PHP的$ _Session Super Global(其中一些文档和论坛反馈指出,出于安全原因,这不是放置敏感信息的好地方) 应用程序:使用PHP的APC(堆栈溢出链接) 我是完全出去吃午餐还是相似?我知道,与Java相比,PHP的一个主要区别是PHP的[Nothane Nothane] [5]架构. . 任何建议/指导/清除更正最欢迎. 解决方案 您在
以下是关于 scope 的编程技术问答
我很难理解如何使用对象. 特定代码: class first{ class second{ public function widgets(){ $a_variable = $a_value; } #1 } $second = new second; #2 } #3 $first = new first; 如果我初始化$a_variable为$a_variable它仅在功能中可用,正确? 如果我初始化$a_varialbe为$this->a_variable它仅在class second内可用,正确? 我可以初始化$a_variable为$first->second->a_variable吗?如果是这样,我该如何称呼它为#1,#2和#3? 我可以初始化$a_varialbe as $this->second->a_variable吗?如果是这样,我该如何称呼它为#
我的一个视图中有一个函数,我想通过CodeIgniter的数据数组访问视图可用的一个变量. 例如;在我的控制器中,我有一个: $this->load->view('someview', array( 'info' => 'some info' )); 现在,在我的视图中,我有一个函数,我希望能够从该功能范围内访问变量$info. 可能吗? 解决方案 在您的控制器中: $GLOBALS['var_available_in_function'] = $value; 您的功能: function get_var() { global $var_available_in_function; return $var_available_in_function; } 其他解决方案 我尝试过,但在我的视图中使用globals someview.php不起作用. function fu
如果我将一个值分配给变量的值,该值在函数终止时会自动未设置的变量,或者仅在PHP脚本完成执行时才能解开? 我正在尝试确定符合临时性,函数范围变量在功能中或不用担心是否更聪明,因为它们会被PHP引擎自动取消. 解决方案 当函数退出时,该变量将无法设置,除非它具有将其"活着"的外部引用.是否释放了变量的实际内存完全取决于垃圾收集器. GC是一项昂贵的操作,PHP只会在需要时调用它(例如,内存变得紧张). 其他解决方案 完全取决于函数的范围.从理论上讲,您可以将整个脚本运行在一个函数的范围内(希望一个调用其他功能,但仍然...). 对于具有最小副作用的合理尺寸的功能,将您的对象设置放置是完全可以的 - 在完成该功能后,将调用其攻击器(这是未设置的第二个效果),并且将被清理干净在功能完成后的第一个清理周期中.对于涉及大量对象上创建的较大函数,可以手动删除对象. 其他解决方案 Zend Engine将为您进行清理,根据需要减少参考计数.
我正在研究一个可以通过静态函数调用以及对象方法访问的类.我发现的一件事是,我正在跨多个功能复制逻辑. 简化的示例: class Configurable{ protected $configurations = array(); protected static $static_configurations = array(); public function configure($name, $value){ // ...lots of validation logic... $this->configurations[$name] = $value; } public static function static_configure($name, $value){ // ...lots of validation logic (repeated)...
我很高兴有一个可变的范围问题.也许我只需要更多咖啡... 这是我的(简化)代码 - 这是在CodeIgniter 2: 中 class Agent extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('agent_model'); // Get preliminary data that will be often-used in Agent functions $user = $this->my_auth_library->get_user(); $agent = $this->agent_model->get_agent($user->id); } public function index() { $this->template->set('in
我已经阅读了很多很多线程,但仍然无法缠绕我的头. 这是我的基本问题: header.php包括一个称为navigation.php的文件.在navigation.php中,$previous和$next被定义.使用回声语句,我已验证它们具有值. 下一步,header.php包括一个称为backnext.php的文件.我需要backnext.php知道$previous和$next的值.如果我在backnext.php的顶部将它们声明为global,我不会遇到错误,但是echo语句显示它们是空的.如果我不这样做,我会得到undefined variable错误. 我确切需要在哪里将它们声明为global才能正确读取其值? 这些文件都不使用函数或类. 解决方案 如果这些文件都没有功能或类. 听起来您包含的顺序可能有点错. 更新: 如果我正确理解,您有类似的东西: header.php:
有没有办法查看回溯中每个堆栈框架中设置的变量?我可以将debug_backtrace(true)的组合非常接近,以获取每个对象上的对象,以获取$ this vars,每个返回框架中的args键,get_defined_vars获得全球变量设置在函数中,我找不到一种检索方法. 这是一个例子: function method1($foo) { $temp = method2($foo + 1); foreach ($temp as $t) { method2($t); } } function method2($bar) { $temp2 = $bar->value + $_GET['val']; debug(); } function debug() { // to be created $global_scope = get_defined_vars(); $bt = debug_backtr
我正在尝试获得大于n的数组值的计数. 我正在使用array_reduce()喜欢: $arr = range(1,10); echo array_reduce($arr, function ($a, $b) { return ($b > 5) ? ++$a : $a; }); 这打印了数组中元素的数量,大于硬编码5良好. 但是如何制作5一个变量,例如$n? 我已经尝试引入这样的第三个论点: array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }); // ^ ^ 甚至 array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }, $n); //
愚蠢的PHP问题... 为什么我不能这样做? echo Auth::getFullUser()[ 'country' ]; 相反,您必须执行此操作 $user = Auth::getFullUser(); echo $user[ 'country' ]; 解决方案 不幸的是语法不允许. afaik一次有意将该语法放入php6中,但它其他解决方案 php语法仅允许在变量表达式(即$user)结束时允许下标表示法(即['country']),而不是表达式(即Auth::getFullUser()) 其他解决方案 语言/解释器设计差. 相同的原因您不能执行" functionName"(),并且功能是不敏感的.
是否有一种方法将对象上下文传递给匿名函数没有传递$this作为参数? class Foo { function bar() { $this->baz = 2; # Fatal error: Using $this when not in object context $echo_baz = function() { echo $this->baz; }; $echo_baz(); } } $f = new Foo(); $f->bar(); 解决方案 您可以将$this分配给某些变量,然后在定义函数时使用use关键字将此变量传递给函数,尽管我不确定它是否易于使用.无论如何,这是一个例子: class Foo { function bar() { $this->baz = 2; $obj = $this; $echo_baz = func
我是php newbie(但是其他语言的长时间开发人员),我正在尝试一些示例DB连接中的" PHP,MySQL和JavaScript".它显示了一个示例文件,其中包括DB连接变量(Servername,用户名,密码,数据库等).我有一个PHP文件,该文件具有少数我编写的功能,其中一个具有一些SQL查询.无论出于何种原因,该文件中的调用require_once都不会输出任何错误(我有e_all配置),但是数据库PHP文件中的这些变量为null. 我拨打了一个带有该功能中所有变量的回声,以查看到底正在发生的事情,当然也打印了一个空白.世界上有什么范围?我必须缺少简单的东西. 这是我在做什么的示例 db_login.php functions.php
在以下代码中,回调函数传递给wrap_map看不到外部函数中的参数,为什么? (有关详细信息,请参见代码注释) public static function wrap_implode($ar, $wrap, $delim){ echo "wrap is $wrap"; //wrap is ok $res = array_map(function($val){ echo "wrap is $wrap"; //wrap is not set here! return $wrap. $val . $wrap; }, $ar); return implode($delim, $res); } 解决方案 因为它在另一个范围中.如果要使用$wrap,请尝试: function($val) use ($wrap){ //etc } 当然,您在这里的功能不需要回调: return $wrap.implode($wrap.$del
我正在尝试从公共静态函数中使用PHP功能(我已经缩短了一点): class MyClass { public static function first_function() { function inside_this() { $some_var = self::second_function(); // doesnt work inside this function } // other code here... } // End first_function protected static function second_function() { // do stuff } // End second_function } // End class PayPalDimesale 那是我收到错误的时候"无法访问self ::当没有类范围处于活动状态时".
我最近经常开始做的一件事是在任务开始时检索一些数据,并将其存储在$ _Session ['mydataforthetask'] 中. 现在,这样做似乎很方便,但是使用这种方法,我对性能,安全风险或类似方法一无所知.这是由具有更多专业知识的程序员经常做的事情,还是更多的业余爱好? 例如: if (!isset($_SESSION['dataentry'])) { $query_taskinfo = "SELECT participationcode, modulearray, wavenum FROM mng_wave WHERE wave_id=" . mysql_real_escape_string($_GET['wave_id']); $result_taskinfo = $db->query($query_taskinfo); $row_taskinfo = $result_taskinfo->fetch_row(); $
大家大家好,我正在尝试解决此主题中的问题 - > >从Prestashop自定义字段获取数据 我已经在班上进行了MySQL查询,现在它可以使用,但是我需要将结果放入班级的一个阵列中.我在下面粘贴我的代码: $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "dbname"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT codice_target FROM customer"; $result = $c
我的php 5.3 有一个奇怪的行为 我在函数 中有一个类别 $new = new self($data); $new->setServiceManager($this->service); $new->cacheInstance(); 但是函数cacheinstance是一个私人函数.... private function cacheInstance() { foreach ($this->data as $name => $class) {...} } 有人可以解释为什么会这样使用?不应该从外部无法访问这种方法吗? 更新: 好吧,现在我完全迷失了...我什至可以毫无疑问的实例的私人变量...就像什么……这必须是某种预期的行为,可以将我指向一个方向吗? 解决方案 如果您可以使用new self()创建类实例,则意味着您在类中,当然可以访问私有属性功能.该片段取自PH
我已经阅读了很多有关此问题的东西,但是我仍然无法解决. 在我的函数文件中,我声明一个具有类似值的变量: $px_host = "localhost"; 我有一个数据库查询函数,因此: function dbQuery($database, $reqquery){ if(!$connect = mysql_connect($px_host, $px_dbuser, $px_dbpass)){ exit("Error - cannot connect to MySQL server - " . mysql_error()); } if(!$database = mysql_select_db($database)){ exit("Error - cannot select database - " . mysql_error()); } if(!$query = mysql_query($reqquery)){ exit("Error - q