国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
yii2源碼學(xué)習(xí)筆記(十八),
首頁(yè) php教程 php手冊(cè) yii2源碼學(xué)習(xí)筆記(十八),

yii2源碼學(xué)習(xí)筆記(十八),

Jul 06, 2016 pm 02:24 PM
component view yii2 學(xué)習(xí) 渲染 原始碼 筆記 繼承

yii2源碼學(xué)習(xí)筆記(十八),

View繼承了component,用于渲染視圖文件:yii2\base\View.php

<span>  1</span> <?<span>php
</span><span>  2</span> <span>/*</span><span>*
</span><span>  3</span> <span> * @link </span><span>http://www.yiiframework.com/</span>
<span>  4</span> <span> * @copyright Copyright (c) 2008 Yii Software LLC
</span><span>  5</span> <span> * @license </span><span>http://www.yiiframework.com/license/</span>
<span>  6</span>  <span>*/</span>
<span>  7</span> 
<span>  8</span> <span>namespace</span> yii\<span>base</span><span>;
</span><span>  9</span> 
<span> 10</span> <span>use Yii;
</span><span> 11</span> <span>use yii\helpers\FileHelper;
</span><span> 12</span> <span>use yii\widgets\Block;
</span><span> 13</span> <span>use yii\widgets\ContentDecorator;
</span><span> 14</span> <span>use yii\widgets\FragmentCache;
</span><span> 15</span> 
<span> 16</span> <span>/*</span><span>*
</span><span> 17</span> <span> * View represents a view object in the MVC pattern.
</span><span> 18</span> <span> * MVC中的視圖
</span><span> 19</span> <span> * View provides a set of methods (e.g. [[render()]]) for rendering purpose.
</span><span> 20</span> <span> * 視圖提供了一套渲染頁(yè)面的方法
</span><span> 21</span> <span> * @property string|boolean $viewFile The view file currently being rendered. False if no view file is being
</span><span> 22</span> <span> * rendered. This property is read-only.
</span><span> 23</span> <span> *
</span><span> 24</span> <span> * @author Qiang Xue <qiang.xue@gmail.com>
</span><span> 25</span> <span> * @since 2.0
</span><span> 26</span>  <span>*/</span>
<span> 27</span> <span>class</span><span> View extends Component
</span><span> 28</span> <span>{
</span><span> 29</span>     <span>/*</span><span>*
</span><span> 30</span> <span>     * @event Event an event that is triggered by [[beginPage()]].
</span><span> 31</span> <span>     * 事件被[beginPage()]觸發(fā)
</span><span> 32</span>      <span>*/</span>
<span> 33</span>     <span>const</span> EVENT_BEGIN_PAGE = <span>'</span><span>beginPage</span><span>'</span><span>;
</span><span> 34</span>     <span>/*</span><span>*
</span><span> 35</span> <span>     * @event Event an event that is triggered by [[endPage()]].
</span><span> 36</span> <span>     * 事件被[endPage()]觸發(fā)
</span><span> 37</span>      <span>*/</span>
<span> 38</span>     <span>const</span> EVENT_END_PAGE = <span>'</span><span>endPage</span><span>'</span><span>;
</span><span> 39</span>     <span>/*</span><span>*
</span><span> 40</span> <span>     * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file.
</span><span> 41</span> <span>     * 事件被[renderFile()]觸發(fā)前呈現(xiàn)一個(gè)視圖文件
</span><span> 42</span>      <span>*/</span>
<span> 43</span>     <span>const</span> EVENT_BEFORE_RENDER = <span>'</span><span>beforeRender</span><span>'</span><span>;
</span><span> 44</span>     <span>/*</span><span>*
</span><span> 45</span> <span>     * @event ViewEvent an event that is triggered by [[renderFile()]] right after it renders a view file.
</span><span> 46</span> <span>     * 事件被[renderFile()]觸發(fā)后呈現(xiàn)一個(gè)視圖文件
</span><span> 47</span>      <span>*/</span>
<span> 48</span>     <span>const</span> EVENT_AFTER_RENDER = <span>'</span><span>afterRender</span><span>'</span><span>;
</span><span> 49</span> 
<span> 50</span>     <span>/*</span><span>*
</span><span> 51</span> <span>     * @var ViewContextInterface the context under which the [[renderFile()]] method is being invoked.
</span><span> 52</span> <span>     * ViewContextInterface背景下 [renderFile()]方法被調(diào)用
</span><span> 53</span>      <span>*/</span>
<span> 54</span>     <span>public</span><span> $context;
</span><span> 55</span>     <span>/*</span><span>*
</span><span> 56</span> <span>     * @var mixed custom parameters that are shared among view templates.
</span><span> 57</span> <span>     * 視圖模板中共享的自定義參數(shù)
</span><span> 58</span>      <span>*/</span>
<span> 59</span>     <span>public</span> $<span>params</span> =<span> [];
</span><span> 60</span>     <span>/*</span><span>*
</span><span> 61</span> <span>     * @var array a list of available renderers indexed by their corresponding supported file extensions.
</span><span> 62</span> <span>     * Each renderer may be a view renderer object or the configuration for creating the renderer object.
</span><span> 63</span> <span>     *  一個(gè)可用的渲染索引列表。每個(gè)渲染器是一個(gè)渲染器對(duì)象或創(chuàng)建渲染對(duì)象配置數(shù)組
</span><span> 64</span> <span>     * For example, the following configuration enables both Smarty and Twig view renderers:
</span><span> 65</span> <span>     *
</span><span> 66</span> <span>     * ~~~
</span><span> 67</span> <span>     * [
</span><span> 68</span> <span>     *     'tpl' => ['class' => 'yii\smarty\ViewRenderer'],
</span><span> 69</span> <span>     *     'twig' => ['class' => 'yii\twig\ViewRenderer'],
</span><span> 70</span> <span>     * ]
</span><span> 71</span> <span>     * ~~~
</span><span> 72</span> <span>     *
</span><span> 73</span> <span>     * If no renderer is available for the given view file, the view file will be treated as a normal PHP
</span><span> 74</span> <span>     * and rendered via [[renderPhpFile()]].
</span><span> 75</span>      <span>*/</span>
<span> 76</span>     <span>public</span><span> $renderers;
</span><span> 77</span>     <span>/*</span><span>*
</span><span> 78</span> <span>     * @var string the default view file extension. This will be appended to view file names if they don't have file extensions.
</span><span> 79</span> <span>     * 默認(rèn)視圖文件擴(kuò)展名,文件沒(méi)有擴(kuò)展名的情況下自動(dòng)加載
</span><span> 80</span>      <span>*/</span>
<span> 81</span>     <span>public</span> $defaultExtension = <span>'</span><span>php</span><span>'</span><span>;
</span><span> 82</span>     <span>/*</span><span>*
</span><span> 83</span> <span>     * @var Theme|array|string the theme object or the configuration for creating the theme object.
</span><span> 84</span> <span>     * If not set, it means theming is not enabled.主題對(duì)象或創(chuàng)建主題對(duì)象的配置 未設(shè)置則不啟用
</span><span> 85</span>      <span>*/</span>
<span> 86</span>     <span>public</span><span> $theme;
</span><span> 87</span>     <span>/*</span><span>*
</span><span> 88</span> <span>     * @var array a list of named output blocks. The keys are the block names and the values
</span><span> 89</span> <span>     * are the corresponding block content. You can call [[beginBlock()]] and [[endBlock()]]
</span><span> 90</span> <span>     * to capture small fragments of a view. They can be later accessed somewhere else
</span><span> 91</span> <span>     * through this property.
</span><span> 92</span> <span>     * 一個(gè)輸出塊列表。鍵是塊名稱(chēng)值為內(nèi)容??梢哉{(diào)用 [beginblock()]和[endblock()]捕獲視圖的小片段
</span><span> 93</span> <span>     * 可以在其他地方通過(guò)這個(gè)屬性訪問(wèn)。
</span><span> 94</span>      <span>*/</span>
<span> 95</span>     <span>public</span><span> $blocks;
</span><span> 96</span>     <span>/*</span><span>*
</span><span> 97</span> <span>     * @var array a list of currently active fragment cache widgets. This property
</span><span> 98</span> <span>     * is used internally to implement the content caching feature. Do not modify it directly.
</span><span> 99</span> <span>     * 當(dāng)前操作片段的緩存部件列表。用于內(nèi)部實(shí)現(xiàn)內(nèi)容緩存功能。不要直接修改
</span><span>100</span> <span>     * @internal
</span><span>101</span>      <span>*/</span>
<span>102</span>     <span>public</span> $cacheStack =<span> [];
</span><span>103</span>     <span>/*</span><span>*
</span><span>104</span> <span>     * @var array a list of placeholders for embedding dynamic contents. This property
</span><span>105</span> <span>     * is used internally to implement the content caching feature. Do not modify it directly.
</span><span>106</span> <span>     * 嵌入動(dòng)態(tài)內(nèi)容占位符列表。 用于內(nèi)部實(shí)現(xiàn)內(nèi)容緩存功能。不要直接修改
</span><span>107</span> <span>     * @internal
</span><span>108</span>      <span>*/</span>
<span>109</span>     <span>public</span> $dynamicPlaceholders =<span> [];
</span><span>110</span> 
<span>111</span>     <span>/*</span><span>*
</span><span>112</span> <span>     * @var array the view files currently being rendered. There may be multiple view files being
</span><span>113</span> <span>     * rendered at a moment because one view may be rendered within another.
</span><span>114</span> <span>     * 正在渲染的視圖文件??赡苡卸鄠€(gè)視圖文件被渲染,因?yàn)橐粋€(gè)視圖可以在另一個(gè)視圖中呈現(xiàn)
</span><span>115</span>      <span>*/</span>
<span>116</span>     <span>private</span> $_viewFiles =<span> [];
</span><span>117</span> 
<span>118</span> 
<span>119</span>     <span>/*</span><span>*
</span><span>120</span> <span>     * Initializes the view component.初始化視圖組件
</span><span>121</span>      <span>*/</span>
<span>122</span>     <span>public</span><span> function init()
</span><span>123</span> <span>    {
</span><span>124</span>         parent::init(); <span>//</span><span>調(diào)用父類(lèi)的方法</span>
<span>125</span>         <span>if</span> (is_array($<span>this</span>-><span>theme)) {
</span><span>126</span>             <span>if</span> (!isset($<span>this</span>->theme[<span>'</span><span>class</span><span>'</span><span>])) {
</span><span>127</span>                 $<span>this</span>->theme[<span>'</span><span>class</span><span>'</span>] = <span>'</span><span>yii\base\Theme</span><span>'</span>;<span>//</span><span>是數(shù)組,沒(méi)有設(shè)置類(lèi)名,則類(lèi)名'yii\base\Theme'</span>
<span>128</span> <span>            }
</span><span>129</span>             $<span>this</span>->theme = Yii::createObject($<span>this</span>->theme);<span>//</span><span>設(shè)置了類(lèi)名,調(diào)用配置創(chuàng)建對(duì)象</span>
<span>130</span>         } elseif (is_string($<span>this</span>->theme)) {<span>//</span><span>以字符串參數(shù)的形式創(chuàng)建對(duì)象</span>
<span>131</span>             $<span>this</span>->theme = Yii::createObject($<span>this</span>-><span>theme);
</span><span>132</span> <span>        }
</span><span>133</span> <span>    }
</span><span>134</span> 
<span>135</span>     <span>/*</span><span>*
</span><span>136</span> <span>     * Renders a view.
</span><span>137</span> <span>     * 渲染一個(gè)視圖
</span><span>138</span> <span>     * The view to be rendered can be specified in one of the following formats:
</span><span>139</span> <span>     *
</span><span>140</span> <span>     * - path alias (e.g. "@app/views/site/index");
</span><span>141</span> <span>     * 路徑別名
</span><span>142</span> <span>     * - absolute path within application (e.g. "//site/index"): the view name starts with double slashes.
</span><span>143</span> <span>     *   The actual view file will be looked for under the [[Application::viewPath|view path]] of the application.
</span><span>144</span> <span>     *  絕對(duì)路徑,會(huì)在[Application::viewPath|view path]下查找文件
</span><span>145</span> <span>     * - absolute path within current module (e.g. "/site/index"): the view name starts with a single slash.
</span><span>146</span> <span>     *   The actual view file will be looked for under the [[Module::viewPath|view path]] of the [[Controller::module|current module]].
</span><span>147</span> <span>     * 模塊下的絕對(duì)路徑,會(huì)在[Module::viewPath|view path]下查找文件
</span><span>148</span> <span>     * - relative view (e.g. "index"): the view name does not start with `@` or `/`. The corresponding view file will be
</span><span>149</span> <span>     *   looked for under the [[ViewContextInterface::getViewPath()|view path]] of the view `$context`.
</span><span>150</span> <span>     * 相對(duì)路徑,會(huì)在[ViewContextInterface::getViewPath()|view path]下查找文件  
</span><span>151</span> <span>     * If `$context` is not given, it will be looked for under the directory containing the view currently
</span><span>152</span> <span>     *   being rendered (i.e., this happens when rendering a view within another view).
</span><span>153</span> <span>     *
</span><span>154</span> <span>     * @param string $view the view name.   視圖名稱(chēng)
</span><span>155</span> <span>     * @param array $params the parameters (name-value pairs) that will be extracted and made available in the view file.
</span><span>156</span> <span>     * 視圖中應(yīng)用參數(shù)
</span><span>157</span> <span>     * @param object $context the context to be assigned to the view and can later be accessed via [[context]]
</span><span>158</span> <span>     * in the view. If the context implements [[ViewContextInterface]], it may also be used to locate
</span><span>159</span> <span>     * the view file corresponding to a relative view name. 對(duì)應(yīng)情景
</span><span>160</span> <span>     * @return string the rendering result
</span><span>161</span> <span>     * @throws InvalidParamException if the view cannot be resolved or the view file does not exist.
</span><span>162</span> <span>     * @see renderFile()
</span><span>163</span>      <span>*/</span>
<span>164</span>     <span>public</span> function render($view, $<span>params</span> = [], $context = <span>null</span><span>)
</span><span>165</span> <span>    {
</span><span>166</span>         $viewFile = $<span>this</span>->findViewFile($view, $context);<span>//</span><span>查找視圖文件路徑</span>
<span>167</span>         <span>return</span> $<span>this</span>->renderFile($viewFile, $<span>params</span>, $context);<span>//</span><span>渲染視圖文件</span>
<span>168</span> <span>    }
</span><span>169</span> 
<span>170</span>     <span>/*</span><span>*
</span><span>171</span> <span>     * Finds the view file based on the given view name.通過(guò)視圖文件名查找視圖文件
</span><span>172</span> <span>     * @param string $view the view name or the path alias of the view file. Please refer to [[render()]]
</span><span>173</span> <span>     * on how to specify this parameter. 視圖名稱(chēng)或路徑視圖文件的別名
</span><span>174</span> <span>     * @param object $context the context to be assigned to the view and can later be accessed via [[context]]
</span><span>175</span> <span>     * in the view. If the context implements [[ViewContextInterface]], it may also be used to locate
</span><span>176</span> <span>     * the view file corresponding to a relative view name. 對(duì)應(yīng)情景
</span><span>177</span> <span>     * @return string the view file path. Note that the file may not exist. 文件路徑
</span><span>178</span> <span>     * @throws InvalidCallException if a relative view name is given while there is no active context to
</span><span>179</span> <span>     * determine the corresponding view file.
</span><span>180</span>      <span>*/</span>
<span>181</span>     <span>protected</span> function findViewFile($view, $context = <span>null</span><span>)
</span><span>182</span> <span>    {
</span><span>183</span>         <span>if</span> (strncmp($view, <span>'</span><span>@</span><span>'</span>, <span>1</span>) === <span>0</span><span>) {
</span><span>184</span>             <span>//</span><span> e.g. "@app/views/main"  判斷是否是別名路徑,是則獲取真實(shí)路徑</span>
<span>185</span>             $file =<span> Yii::getAlias($view);
</span><span>186</span>         } elseif (strncmp($view, <span>'</span><span>//</span><span>'</span>, <span>2</span>) === <span>0</span><span>) {
</span><span>187</span>             <span>//</span><span> e.g. "</span><span>//</span><span>layouts/main" 以</span><span>//</span><span>開(kāi)始,查找文件路徑,拼接視圖文件路徑</span>
<span>188</span>             $file = Yii::$app->getViewPath() . DIRECTORY_SEPARATOR . ltrim($view, <span>'</span><span>/</span><span>'</span><span>);
</span><span>189</span>         } elseif (strncmp($view, <span>'</span><span>/</span><span>'</span>, <span>1</span>) === <span>0</span><span>) {
</span><span>190</span>             <span>//</span><span> e.g. "/site/index"</span>
<span>191</span>             <span>if</span> (Yii::$app->controller !== <span>null</span><span>) { 
</span><span>192</span>                 <span>//</span><span>以/開(kāi)始,且控制器存在,查找控制器對(duì)應(yīng)的文件目錄,拼接路徑</span>
<span>193</span>                 $file = Yii::$app->controller->module->getViewPath() . DIRECTORY_SEPARATOR . ltrim($view, <span>'</span><span>/</span><span>'</span><span>);
</span><span>194</span>             } <span>else</span><span> {
</span><span>195</span>                 <span>throw</span> <span>new</span> InvalidCallException(<span>"</span><span>Unable to locate view file for view '$view': no active controller.</span><span>"</span><span>);
</span><span>196</span> <span>            }
</span><span>197</span> <span>        } elseif ($context instanceof ViewContextInterface) {
</span><span>198</span>             <span>//</span><span>對(duì)應(yīng)情景存在 查找文件路徑,拼接視圖文件路徑</span>
<span>199</span>             $file = $context-><span>getViewPath() . DIRECTORY_SEPARATOR . $view;
</span><span>200</span>         } elseif (($currentViewFile = $<span>this</span>->getViewFile()) !== <span>false</span><span>) {
</span><span>201</span>             <span>//</span><span>當(dāng)前渲染文件存在,拼接路徑</span>
<span>202</span>             $file =<span> dirname($currentViewFile) . DIRECTORY_SEPARATOR . $view;
</span><span>203</span>         } <span>else</span><span> {
</span><span>204</span>             <span>throw</span> <span>new</span> InvalidCallException(<span>"</span><span>Unable to resolve view file for view '$view': no active view context.</span><span>"</span><span>);
</span><span>205</span> <span>        }
</span><span>206</span> 
<span>207</span>         <span>if</span> (pathinfo($file, PATHINFO_EXTENSION) !== <span>''</span><span>) {
</span><span>208</span>             <span>return</span> $file;<span>//</span><span>視圖文件的擴(kuò)展名不為空,返回?cái)U(kuò)展名</span>
<span>209</span> <span>        }
</span><span>210</span>         $path = $file . <span>'</span><span>.</span><span>'</span> . $<span>this</span>->defaultExtension; <span>//</span><span>給視圖文件添加擴(kuò)展名</span>
<span>211</span>         <span>if</span> ($<span>this</span>->defaultExtension !== <span>'</span><span>php</span><span>'</span> && !<span>is_file($path)) {
</span><span>212</span>             $path = $file . <span>'</span><span>.php</span><span>'</span><span>;
</span><span>213</span> <span>        }
</span><span>214</span> 
<span>215</span>         <span>return</span> $path;<span>//</span><span>返回路徑</span>
<span>216</span> <span>    }
</span><span>217</span> 
<span>218</span>     <span>/*</span><span>*
</span><span>219</span> <span>     * Renders a view file.
</span><span>220</span> <span>     * 渲染一個(gè)視圖文件。
</span><span>221</span> <span>     * If [[theme]] is enabled (not null), it will try to render the themed version of the view file as long
</span><span>222</span> <span>     * as it is available.
</span><span>223</span> <span>     * 如果[theme]可用,將渲染視圖文件的主題版本直到[theme]不可用
</span><span>224</span> <span>     * The method will call [[FileHelper::localize()]] to localize the view file.
</span><span>225</span> <span>     * 調(diào)用[FileHelper::localize()]方法本地化視圖文件
</span><span>226</span> <span>     * If [[renderers|renderer]] is enabled (not null), the method will use it to render the view file.
</span><span>227</span> <span>     * Otherwise, it will simply include the view file as a normal PHP file, capture its output and
</span><span>228</span> <span>     * return it as a string.
</span><span>229</span> <span>     * 如果[[renderers|renderer]]啟用,該方法將用它來(lái)渲染視圖文件。否則,將視圖文件作為一個(gè)正常的PHP文件包含進(jìn)來(lái),獲取其輸出并返回一個(gè)字符串。
</span><span>230</span> <span>     * @param string $viewFile the view file. This can be either an absolute file path or an alias of it.
</span><span>231</span> <span>     * 視圖文件??梢允墙^對(duì)路徑或它的別名。
</span><span>232</span> <span>     * @param array $params the parameters (name-value pairs) that will be extracted and made available in the view file.
</span><span>233</span> <span>     * 視圖文件執(zhí)行的參數(shù)
</span><span>234</span> <span>     * @param object $context the context that the view should use for rendering the view. If null,
</span><span>235</span> <span>     * existing [[context]] will be used.
</span><span>236</span> <span>     * 用于渲染視圖的上下文
</span><span>237</span> <span>     * @return string the rendering result 
</span><span>238</span> <span>     * @throws InvalidParamException if the view file does not exist
</span><span>239</span>      <span>*/</span>
<span>240</span>     <span>public</span> function renderFile($viewFile, $<span>params</span> = [], $context = <span>null</span><span>)
</span><span>241</span> <span>    {
</span><span>242</span>         $viewFile = Yii::getAlias($viewFile);<span>//</span><span>處理輸入的視圖文件名</span>
<span>243</span> 
<span>244</span>         <span>if</span> ($<span>this</span>->theme !== <span>null</span><span>) {
</span><span>245</span>             $viewFile = $<span>this</span>->theme->applyTo($viewFile);<span>//</span><span>如果theme非空,應(yīng)用到視圖文件</span>
<span>246</span> <span>        }
</span><span>247</span>         <span>if</span><span> (is_file($viewFile)) {
</span><span>248</span>             $viewFile = FileHelper::localize($viewFile);<span>//</span><span>本地化視圖文件</span>
<span>249</span>         } <span>else</span><span> {
</span><span>250</span>             <span>throw</span> <span>new</span> InvalidParamException(<span>"</span><span>The view file does not exist: $viewFile</span><span>"</span><span>);
</span><span>251</span> <span>        }
</span><span>252</span> 
<span>253</span>         $oldContext = $<span>this</span>-><span>context;
</span><span>254</span>         <span>if</span> ($context !== <span>null</span><span>) {
</span><span>255</span>             $<span>this</span>->context =<span> $context;
</span><span>256</span> <span>        }
</span><span>257</span>         $output = <span>''</span><span>;
</span><span>258</span>         $<span>this</span>->_viewFiles[] = $viewFile;<span>//</span><span>記錄當(dāng)前渲染文件</span>
<span>259</span> 
<span>260</span>         <span>if</span> ($<span>this</span>->beforeRender($viewFile, $<span>params</span>)) {<span>//</span><span>如果前置事件執(zhí)行成功</span>
<span>261</span>             Yii::trace(<span>"</span><span>Rendering view file: $viewFile</span><span>"</span>, __METHOD__);<span>//</span><span>記錄trace信息</span>
<span>262</span>             $ext = pathinfo($viewFile, PATHINFO_EXTENSION);<span>//</span><span>視圖文件擴(kuò)展名</span>
<span>263</span>             <span>if</span> (isset($<span>this</span>->renderers[$ext])) {<span>//</span><span>視圖文件的擴(kuò)展名是否支持</span>
<span>264</span>                 <span>if</span> (is_array($<span>this</span>->renderers[$ext]) || is_string($<span>this</span>-><span>renderers[$ext])) {
</span><span>265</span>                     $<span>this</span>->renderers[$ext] = Yii::createObject($<span>this</span>-><span>renderers[$ext]);
</span><span>266</span> <span>                }
</span><span>267</span>                 <span>/*</span><span> @var $renderer ViewRenderer </span><span>*/</span>
<span>268</span>                 $renderer = $<span>this</span>->renderers[$ext];<span>//</span><span>賦值view渲染器對(duì)象</span>
<span>269</span>                 $output = $renderer->render($<span>this</span>, $viewFile, $<span>params</span>);<span>//</span><span>渲染視圖文件</span>
<span>270</span>             } <span>else</span> {<span>//</span><span>視圖文件不是支持的類(lèi)型,以普通php文件處理</span>
<span>271</span>                 $output = $<span>this</span>->renderPhpFile($viewFile, $<span>params</span><span>);
</span><span>272</span> <span>            }
</span><span>273</span>             $<span>this</span>->afterRender($viewFile, $<span>params</span><span>, $output);
</span><span>274</span> <span>        }
</span><span>275</span> 
<span>276</span>         array_pop($<span>this</span>-><span>_viewFiles);
</span><span>277</span>         $<span>this</span>->context =<span> $oldContext;
</span><span>278</span> 
<span>279</span>         <span>return</span><span> $output;
</span><span>280</span>     }

?

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Laravel 教程
1601
29
PHP教程
1502
276
小紅書(shū)筆記怎麼刪除 小紅書(shū)筆記怎麼刪除 Mar 21, 2024 pm 08:12 PM

小紅書(shū)筆記怎麼刪除?在小紅書(shū)APP中是可以編輯筆記的,多數(shù)的用戶(hù)不知道小紅書(shū)筆記如何的刪除,接下來(lái)就是小編為用戶(hù)帶來(lái)的小紅書(shū)筆記刪除方法圖文教程,有興趣的用戶(hù)快來(lái)一起看看吧!小紅書(shū)使用教學(xué)小紅書(shū)筆記怎麼刪除1、先打開(kāi)小紅書(shū)APP進(jìn)入到主頁(yè)面,選擇右下角【我】進(jìn)入到專(zhuān)區(qū);2、之後在我的專(zhuān)區(qū),點(diǎn)擊下圖所示的筆記頁(yè)面,選擇要?jiǎng)h除的筆記;3、進(jìn)入到筆記頁(yè)面,右上角【三個(gè)點(diǎn)】;4、最後下方會(huì)展開(kāi)功能欄,點(diǎn)選【刪除】即可完成。

小紅書(shū)發(fā)布過(guò)的筆記不見(jiàn)了怎麼辦?它剛發(fā)的筆記搜不到的原因是什麼? 小紅書(shū)發(fā)布過(guò)的筆記不見(jiàn)了怎麼辦?它剛發(fā)的筆記搜不到的原因是什麼? Mar 21, 2024 pm 09:30 PM

作為一名小紅書(shū)的用戶(hù),我們都曾經(jīng)遇到過(guò)發(fā)布過(guò)的筆記突然不見(jiàn)了的情況,這無(wú)疑讓人感到困惑和擔(dān)憂。在這種情況下,我們?cè)撛觞N辦呢?本文將圍繞著「小紅書(shū)發(fā)布過(guò)的筆記不見(jiàn)了怎麼辦」這個(gè)主題,為你詳細(xì)解答。一、小紅書(shū)發(fā)布過(guò)的筆記不見(jiàn)了怎麼辦?首先,不要驚慌。如果你發(fā)現(xiàn)筆記不見(jiàn)了,保持冷靜是關(guān)鍵,不要慌張。這可能是由於平臺(tái)系統(tǒng)故障或操作失誤引起的。檢查發(fā)布記錄很簡(jiǎn)單。只要打開(kāi)小紅書(shū)App,點(diǎn)擊“我”→“發(fā)布”→“所有發(fā)布”,就可以查看自己的發(fā)布記錄。在這裡,你可以輕鬆找到之前發(fā)布的筆記。 3.重新發(fā)布。如果找到了之

C++ 函式繼承詳解:如何在繼承中使用「基底類(lèi)別指標(biāo)」和「衍生類(lèi)別指標(biāo)」? C++ 函式繼承詳解:如何在繼承中使用「基底類(lèi)別指標(biāo)」和「衍生類(lèi)別指標(biāo)」? May 01, 2024 pm 10:27 PM

在函數(shù)繼承中,使用「基底類(lèi)別指標(biāo)」和「衍生類(lèi)別指標(biāo)」來(lái)理解繼承機(jī)制:基底類(lèi)別指標(biāo)指向派生類(lèi)別物件時(shí),執(zhí)行向上轉(zhuǎn)型,只存取基底類(lèi)別成員。派生類(lèi)別指標(biāo)指向基底類(lèi)別物件時(shí),執(zhí)行向下轉(zhuǎn)型(不安全),必須謹(jǐn)慎使用。

酷家樂(lè)怎麼渲染正交俯視圖_酷家樂(lè)渲染正交俯視圖教程 酷家樂(lè)怎麼渲染正交俯視圖_酷家樂(lè)渲染正交俯視圖教程 Apr 02, 2024 pm 01:10 PM

1.首先在酷家樂(lè)中開(kāi)啟要渲染的設(shè)計(jì)方案。 2、然後在渲染選單下開(kāi)啟俯視圖渲染。 3.接著在俯視圖渲染介面中點(diǎn)選參數(shù)設(shè)定中的正交。 4.最後調(diào)整好模型角度即可點(diǎn)選立即渲染,渲染正交俯視圖。

小紅書(shū)怎麼在筆記中加入商品連結(jié) 小紅書(shū)在筆記中加入商品連結(jié)教學(xué) 小紅書(shū)怎麼在筆記中加入商品連結(jié) 小紅書(shū)在筆記中加入商品連結(jié)教學(xué) Mar 12, 2024 am 10:40 AM

小紅書(shū)怎麼在筆記中添加商品連結(jié)?在小紅書(shū)這款app中用戶(hù)不僅可以瀏覽各種內(nèi)容還可以進(jìn)行購(gòu)物,所以這款app中關(guān)於購(gòu)物推薦、好物分享的內(nèi)容是非常多的,如果小夥伴在這款app也是一個(gè)達(dá)人的話,也可以分享一些購(gòu)物經(jīng)驗(yàn),找到商家進(jìn)行合作,在筆記中添加連結(jié)之類(lèi)的,很多人都願(yuàn)意使用這款app購(gòu)物,因?yàn)椴粌H方便,而且有很多達(dá)人會(huì)進(jìn)行一些推薦,可以一邊瀏覽有趣內(nèi)容,一邊看看有沒(méi)有適合自己的衣服商品。一起看看如何在筆記中添加商品連結(jié)吧!小紅書(shū)筆記添加商品連結(jié)方法  在手機(jī)桌面上開(kāi)啟app?! ≡赼pp首頁(yè)點(diǎn)擊

一起學(xué)習(xí)word根號(hào)輸入方法 一起學(xué)習(xí)word根號(hào)輸入方法 Mar 19, 2024 pm 08:52 PM

在word編輯文字內(nèi)容時(shí),有時(shí)會(huì)需要輸入公式符號(hào)。有的小夥子們不知道在word根號(hào)輸入的方法,小面就讓小編跟小夥伴們一起分享下word根號(hào)輸入的方法教學(xué)。希望對(duì)小夥伴們有幫助。首先,開(kāi)啟電腦上的Word軟體,然後開(kāi)啟要編輯的文件,並將遊標(biāo)移到需要插入根號(hào)的位置,參考下方的圖片範(fàn)例。 2.選擇【插入】,再選擇符號(hào)裡的【公式】。如下方圖片紅色圈的部分內(nèi)容所示:3.接著選擇下方的【插入新公式】。如下方圖片紅色圈的部分內(nèi)容所示:4.選擇【根式】,再選擇適當(dāng)?shù)母?hào)。如下方圖片紅色圈的部分內(nèi)容所示:

C++ 函式繼承詳解:如何理解繼承中的「is-a」與「has-a」關(guān)係? C++ 函式繼承詳解:如何理解繼承中的「is-a」與「has-a」關(guān)係? May 02, 2024 am 08:18 AM

C++函式繼承詳解:掌握「is-a」和「has-a」關(guān)係什麼是函式繼承?函數(shù)繼承是C++中一種將衍生類(lèi)別中定義的方法與基底類(lèi)別中定義的方法關(guān)聯(lián)起來(lái)的技術(shù)。它允許衍生類(lèi)別存取和重寫(xiě)基底類(lèi)別的方法,從而擴(kuò)展了基底類(lèi)別的功能。 「is-a」和「has-a」關(guān)係在函數(shù)繼承中,「is-a」關(guān)係指派生類(lèi)別是基底類(lèi)別的子類(lèi)型,也就是說(shuō),衍生類(lèi)別「繼承」了基底類(lèi)別的特性和行為。 「has-a」關(guān)係指派生類(lèi)別包含對(duì)基底類(lèi)別物件的參考或指針,也就是說(shuō),衍生類(lèi)別「擁有」了基底類(lèi)別物件。語(yǔ)法以下是如何實(shí)作函數(shù)繼承的語(yǔ)法:classDerivedClass:pu

C++ 函式繼承詳解:如何偵錯(cuò)繼承中出現(xiàn)的錯(cuò)誤? C++ 函式繼承詳解:如何偵錯(cuò)繼承中出現(xiàn)的錯(cuò)誤? May 02, 2024 am 09:54 AM

繼承錯(cuò)誤調(diào)試技巧:確保正確的繼承關(guān)係。使用偵錯(cuò)器逐步執(zhí)行程式碼,檢查變數(shù)值。確保正確使用virtual修飾符。檢查隱藏的繼承帶來(lái)的菱形繼承問(wèn)題。檢查抽象類(lèi)別中未實(shí)現(xiàn)的純虛函數(shù)。

See all articles