<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A18制造 &#187; 函数</title>
	<atom:link href="http://a18zhizao.com/ytag/%e5%87%bd%e6%95%b0/feed" rel="self" type="application/rss+xml" />
	<link>http://a18zhizao.com</link>
	<description>梦想的种子飞入了大地，所需要的只有时间。</description>
	<lastBuildDate>Tue, 24 Jan 2012 11:50:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>让您知道您的方法是被何“人”调用</title>
		<link>http://a18zhizao.com/y2010/1179_let-you-know-that-your-way-is-what-people-call.html</link>
		<comments>http://a18zhizao.com/y2010/1179_let-you-know-that-your-way-is-what-people-call.html#comments</comments>
		<pubDate>Mon, 04 Jan 2010 03:56:13 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[CShap]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[调用]]></category>
		<category><![CDATA[集合]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/y2010/1179_let-you-know-that-your-way-is-what-people-call.html</guid>
		<description><![CDATA[也许在某些场合下我们想知道自己的某个方法是被谁（哪个方法）调用的？比如下面的例子： 在上面代码中，我们要在DisabledObsoleteMethod函数里限制具有“Obsolete”属性的方法调用，我们如何去做呢？ 在.Net中提供了一个"StackFrame"类用于表示当前线程上的函数调用堆栈中的某个具体函数，所以我们通过它就可继续编写我们的DisabledObsoleteMethod函数，代码如下： 到此，当运行Method1时我们的DisabledObsoleteMethod函数就可以正常运作，而Method2就会被抛出异常警告了 因为StackFrame的构造函数可以指定偏移量，所以我们可以使用它获取调用我们的函数时函数调用堆栈里都有些什么函数，也即是可以了解到当前程序的一个流程是如何的，示例代码如下： 其实.NET已经为我们提供了一个StackTrace类，其可以获取函数调用堆栈里的所有函数的有序集合，通过它我们就能将上面的代码简化为下面的代码了，如下： 两者输出的结果还是一样的,如下 Main _nExecuteAssembly ExecuteAssembly RunUsersAssembly ThreadStart_Context Run ThreadStart 看来在控制台程序中也是由某个线程委托开始运作的。 其时，.NET里还有一个东东可以方便的得到当前调用方法的引用，这东东就是MethodBase，其有一个静态方法GetCurrentMethod 可直接获取当前执行的方法引用，所以我们可以将上面的StackFrame处的两句代码改为如下： 原文地址]]></description>
			<content:encoded><![CDATA[<p>也许在某些场合下我们想知道自己的某个方法是被谁（哪个方法）调用的？比如下面的例子：<br />
<span id="more-1179"></span></p>
<pre class="brush: csharp; title: ; notranslate">
/**//// &lt;summary&gt;
        /// 正常方法
        /// &lt;/summary&gt;
        static void Method1()
        {
            DisabledObsoleteMethod();
        }

        /**//// &lt;summary&gt;
        /// 过期方法
        /// &lt;/summary&gt;
        [Obsolete]
        static void Method2()
        {
            DisabledObsoleteMethod();
        }

        /**//// &lt;summary&gt;
        /// 禁止过期方法调用此方法
        /// &lt;/summary&gt;
        static void DisabledObsoleteMethod()
        {
            //如果调用此方法的方法中有&quot;Obsolete&quot;标记则不允许继续运行
        }
</pre>
<p>在上面代码中，我们要在DisabledObsoleteMethod函数里限制具有“Obsolete”属性的方法调用，我们如何去做呢？</p>
<p>在.Net中提供了一个"StackFrame"类用于表示当前线程上的函数调用堆栈中的某个具体函数，所以我们通过它就可继续编写我们的DisabledObsoleteMethod函数，代码如下：</p>
<pre class="brush: csharp; title: ; notranslate">
        /**//// &lt;summary&gt;
        /// 禁止过期方法调用此方法
        /// &lt;/summary&gt;
        static void DisabledObsoleteMethod()
        {
            StackFrame frame = new StackFrame(1);       //偏移一个函数位,也即是获取当前函数的前一个调用函数
            MethodBase method = frame.GetMethod();      //取得调用函数
            //反射获取其特性
            object[] attributes = method.GetCustomAttributes(typeof(ObsoleteAttribute), false);
            if (attributes.Length &gt; 0)
            {
                //包含有&quot;Obsolete&quot;标记抛出错误或做其它处理
                throw new Exception(string.Format(&quot;方法{0}包括有Obsolete属性已被禁止调用&quot;,method.Name));
            }

            //继续做其它操作
        }
</pre>
<p>到此，当运行Method1时我们的DisabledObsoleteMethod函数就可以正常运作，而Method2就会被抛出异常警告了</p>
<p>因为StackFrame的构造函数可以指定偏移量，所以我们可以使用它获取调用我们的函数时函数调用堆栈里都有些什么函数，也即是可以了解到当前程序的一个流程是如何的，示例代码如下：</p>
<pre class="brush: csharp; title: ; notranslate">
class Test
    {
        static void Main()
        {
            int offset = 0;
            do
            {
                StackFrame frame = new StackFrame(offset++);
                MethodBase method = frame.GetMethod();
                if (method == null) break;       //如果偏移位置没有函数时,则GetMethod方法返回null
                Console.WriteLine(method.Name);

            } while (true);
            Console.Read();
        }
    }
</pre>
<p>其实.NET已经为我们提供了一个StackTrace类，其可以获取函数调用堆栈里的所有函数的有序集合，通过它我们就能将上面的代码简化为下面的代码了，如下：</p>
<pre class="brush: csharp; title: ; notranslate">
   class Test
    {
        static void Main()
        {
            StackTrace trace = new StackTrace();
            foreach (StackFrame frame in trace.GetFrames())
            {
                Console.WriteLine(frame.GetMethod().Name);
            }
            Console.Read();
        }
    }
</pre>
<p>两者输出的结果还是一样的,如下</p>
<blockquote><p>Main<br />
_nExecuteAssembly<br />
ExecuteAssembly<br />
RunUsersAssembly<br />
ThreadStart_Context<br />
Run<br />
ThreadStart</p></blockquote>
<p>看来在控制台程序中也是由某个线程委托开始运作的。</p>
<p>其时，.NET里还有一个东东可以方便的得到当前调用方法的引用，这东东就是MethodBase，其有一个静态方法GetCurrentMethod 可直接获取当前执行的方法引用，所以我们可以将上面的StackFrame处的两句代码改为如下：</p>
<pre class="brush: csharp; title: ; notranslate">
return (long)(MethodBase.GetCurrentMethod().Invoke(num, new object[] { v2, (v1 + v2), num, cout }));
</pre>
<p><a href="http://www.cnblogs.com/kingthy/archive/2008/04/19/1160816.html">原文地址</a></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2010/1179_let-you-know-that-your-way-is-what-people-call.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress主题函数</title>
		<link>http://a18zhizao.com/y2009/934_wordpress-theme-function.html</link>
		<comments>http://a18zhizao.com/y2009/934_wordpress-theme-function.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 01:14:25 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[主题]]></category>
		<category><![CDATA[函数]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=934</guid>
		<description><![CDATA[wordpress主题函数有许多。这里列举最常用的几个部分。]]></description>
			<content:encoded><![CDATA[<p><strong>（一）WordPress基本模板文件</strong>，一套完整的WordPress模板包括如下文件，但是只有index.php和style.css是不能缺少的：</p>
<ol>
<li>style.css : CSS(样式表)文件，不可缺少版权部分，真正CSS样式表可以放在其他文件；</li>
<li>index.php : 主页模板，不可缺少；</li>
<li>archive.php : Archive/Category模板，如果缺少，默认为index.php的显示；</li>
<li>404.php : Not Found 错误页模板，如果缺少，默认为index.php的显示；</li>
<li>comments.php : 留言/回复模板，不可缺少；</li>
<li>footer.php : Footer模板，可合并到index.php；</li>
<li>header.php : Header模板，可合并到index.php；</li>
<li>sidebar.php : 侧栏模板，可合并到index.php；</li>
<li>page.php : 内容页(Page)模板，如果缺少，默认为index.php的显示；</li>
<li>single.php : 内容页(Post)模板，如果缺少，默认为index.php的显示；</li>
<li>searchform.php : 搜索表单模板，可合并到index.php；</li>
<li>search.php : 搜索结果模板，如果缺少，默认为index.php的显示；</li>
</ol>
<p><span id="more-934"></span><br />
<strong>（二）基本条件判断Tag</strong></p>
<ol>
<li>is_home() : 是否为主页</li>
<li>is_single() : 是否为内容页(Post)</li>
<li>is_page() : 是否为内容页(Page)</li>
<li>is_category() : 是否为Category/Archive页</li>
<li>is_tag() : 是否为Tag存档页</li>
<li>is_date() : 是否为指定日期存档页</li>
<li>is_year() : 是否为指定年份存档页</li>
<li>is_month() : 是否为指定月份存档页</li>
<li>is_day() : 是否为指定日存档页</li>
<li>is_time() : 是否为指定时间存档页</li>
<li>is_archive() : 是否为存档页</li>
<li>is_search() : 是否为搜索结果页</li>
<li>is_404() : 是否为 “HTTP 404: Not Found” 错误页</li>
<li>is_paged() : 主页/Category/Archive页是否以多页显示</li>
</ol>
<p><strong>（三）Header部分常用到的PHP函数</strong></p>
<ol>
<li>&lt;?php bloginfo('name'); ?&gt; : 博客名称(Title)</li>
<li>&lt;?php bloginfo('stylesheet_url'); ?&gt; : CSS文件路径</li>
<li>&lt;?php bloginfo('pingback_url'); ?&gt; : PingBack Url</li>
<li>&lt;?php bloginfo('template_url'); ?&gt; : 模板文件路径</li>
<li>&lt;?php bloginfo('version'); ?&gt; : WordPress版本</li>
<li>&lt;?php bloginfo('atom_url'); ?&gt; : Atom Url</li>
<li>&lt;?php bloginfo('rss2_url'); ?&gt; : RSS 2.o Url</li>
<li>&lt;?php bloginfo('url'); ?&gt; : 博客 Url</li>
<li>&lt;?php bloginfo('html_type'); ?&gt; : 博客网页Html类型</li>
<li>&lt;?php bloginfo('charset'); ?&gt; : 博客网页编码</li>
<li>&lt;?php bloginfo('description'); ?&gt; : 博客描述</li>
<li>&lt;?php wp_title(); ?&gt; : 特定内容页(Post/Page)的标题</li>
</ol>
<p><strong>（四）模板常用的PHP函数及命令</strong></p>
<ol>
<li>&lt;?php get_header(); ?&gt; : 调用Header模板</li>
<li>&lt;?php get_sidebar(); ?&gt; : 调用Sidebar模板</li>
<li>&lt;?php get_footer(); ?&gt; : 调用Footer模板</li>
<li>&lt;?php the_content(); ?&gt; : 显示内容(Post/Page)</li>
<li>&lt;?php if(have_posts()) : ?&gt; : 检查是否存在Post/Page</li>
<li>&lt;?php while(have_posts()) : the_post(); ?&gt; : 如果存在Post/Page则予以显示</li>
<li>&lt;?php endwhile; ?&gt; : While 结束</li>
<li>&lt;?php endif; ?&gt; : If 结束</li>
<li>&lt;?php the_time('字符串') ?&gt; : 显示时间，时间格式由“字符串”参数决定，具体参考PHP手册</li>
<li>&lt;?php comments_popup_link(); ?&gt; : 正文中的留言链接。如果使用 comments_popup_script() ，则留言会在新窗口中打开，反之，则在当前窗口打开</li>
<li>&lt;?php the_title(); ?&gt; : 内容页(Post/Page)标题</li>
<li>&lt;?php the_permalink() ?&gt; : 内容页(Post/Page) Url</li>
<li>&lt;?php the_category(',') ?&gt; : 特定内容页(Post/Page)所属Category</li>
<li>&lt;?php the_author(); ?&gt; : 作者</li>
<li>&lt;?php the_ID(); ?&gt; : 特定内容页(Post/Page) ID</li>
<li>&lt;?php edit_post_link(); ?&gt; : 如果用户已登录并具有权限，显示编辑链接</li>
<li>&lt;?php get_links_list(); ?&gt; : 显示Blogroll中的链接</li>
<li>&lt;?php comments_template(); ?&gt; : 调用留言/回复模板</li>
<li>&lt;?php wp_list_pages(); ?&gt; : 显示Page列表</li>
<li>&lt;?php wp_list_categories(); ?&gt; : 显示Categories列表</li>
<li>&lt;?php next_post_link('%link'); ?&gt; : 下一篇文章链接</li>
<li>&lt;?php previous_post_link('%link'); ?&gt; : 上一篇文章链接</li>
<li>&lt;?php get_calendar(); ?&gt; : 日历</li>
<li>&lt;?php wp_get_archives() ?&gt; : 显示内容存档</li>
<li>&lt;?php posts_nav_link(); ?&gt; : 导航，显示上一篇/下一篇文章链接</li>
<li>&lt;?php include(TEMPLATEPATH . '/文件名'); ?&gt; : 嵌入其他文件，可为定制的模板或其他类型文件</li>
</ol>
<p><strong>（五）与模板相关的其他函数</strong></p>
<ol>
<li><!--p the_search_query();--><span style="font-family: Courier New;">&lt;?php the_search_query(); ?&gt; 搜索表单的值</span></li>
<li>&lt;?php _e('Message'); ?&gt; : 输出相应信息</li>
<li>&lt;?php wp_register(); ?&gt; : 显示注册链接</li>
<li>&lt;?php wp_loginout(); ?&gt; : 显示登录/注销链接</li>
<li><span style="font-family: Courier New;">&lt;?php wp_meta(); ?&gt; 显示管理员的相关控制信息(为插件API HOOK用)</span></li>
<li>&lt;!–next page–&gt; : 将当前内容分页</li>
<li>&lt;!–more–&gt; : 将当前内容截断，以不在主页/目录页显示全部内容</li>
<li>&lt;?php timer_stop(1); ?&gt; : 网页加载时间(秒)</li>
<li>&lt;?php echo get_num_queries(); ?&gt; : 网页加载查询量</li>
</ol>
<p> </p>
<p>显示最新文章<br />
<code><br />
&lt;?php query_posts(’showposts=5′); ?&gt;<br />
&lt;ul&gt;<br />
&lt;?php while (have_posts()) : the_post(); ?&gt;<br />
&lt;li&gt;&lt;a href=”&lt;?php the_permalink() ?&gt;”&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php endwhile;?&gt;<br />
&lt;/ul&gt;<br />
</code><br />
显示最新评论<br />
<code><br />
&lt;?php global $wpdb; $sql = “SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url, SUBSTRING(comment_content,1,30) AS com_excerpt FROM $wpdb-&gt;comments LEFT OUTER JOIN $wpdb-&gt;posts ON ($wpdb-&gt;comments.comment_post_ID = $wpdb-&gt;posts.ID) WHERE comment_approved = ‘1′ AND comment_type = ” AND post_password = ” ORDER BY comment_date_gmt DESC LIMIT 10″; $comments = $wpdb-&gt;get_results($sql); $output = $pre_HTML; $output .= “\n&lt;ul&gt;”; foreach ($comments as $comment) { $output .= “\n&lt;li&gt;”.strip_tags($comment-&gt;comment_author) .”:” . “&lt;a href=\”" . get_permalink($comment-&gt;ID) . “#comment-” . $comment-&gt;comment_ID . “\” title=\”on ” . $comment-&gt;post_title . “\”&gt;” . strip_tags($comment-&gt;com_excerpt) .”&lt;/a&gt;&lt;/li&gt;”; } $output .= “\n&lt;/ul&gt;”; $output .= $post_HTML; echo $output;?&gt;<br />
</code><br />
显示热评文章<br />
<code><br />
&lt;?php $result = $wpdb-&gt;get_results(”SELECT comment_count,ID,post_title FROM $wpdb-&gt;posts ORDER BY comment_count DESC LIMIT 0 , 10″); foreach ($result as $topten) { $postid = $topten-&gt;ID; $title = $topten-&gt;post_title; $commentcount = $topten-&gt;comment_count; if ($commentcount != 0) { ?&gt;<br />
&lt;li&gt;&lt;a href=”&lt;?php echo get_permalink($postid); ?&gt;” title=”&lt;?php echo $title ?&gt;”&gt;&lt;?php echo $title ?&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php } } ?&gt;<br />
</code><br />
显示文章分类<br />
<code><br />
&lt;h2&gt;Categories&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_list_cats(’sort_column=name’); ?&gt;&lt;/ul&gt;<br />
</code><br />
显示归档<br />
<code><br />
&lt;h2&gt;Archives&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_get_archives(’type=monthly’); ?&gt;&lt;/ul&gt;<br />
</code><br />
在侧栏显示页面列表<br />
<code><br />
&lt;h2&gt;Pages&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_list_pages(’title_li=’); ?&gt;&lt;/ul&gt;<br />
</code><br />
调用Gravatar(只适应2.5以上)<br />
<code><br />
&lt;?php if(function_exists(’get_avatar’)){ echo get_avatar($comment, ‘50?);} ?&gt;<br />
</code><br />
显示友情链接<br />
<code><br />
&lt;ul&gt;&lt;?php get_links_list(); ?&gt;&lt;/ul&gt;<br />
</code><br />
显示管理员链接<br />
<code><br />
&lt;ul&gt;&lt;?php wp_register(); ?&gt;<br />
&lt;li&gt;&lt;?php wp_loginout(); ?&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”http://www.wordpress.org/”&gt;WordPress&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php wp_meta(); ?&gt;<br />
&lt;li&gt;&lt;a href=”http://validator.w3.org/check?uri=referer”&gt;XHTML&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
</code><br />
在侧栏显示页面的子页面<br />
<code><br />
&lt;?php$children = wp_list_pages(’title_li=&amp;child_of=’.$post-&gt;ID.’&amp;echo=0′);if ($children) { ?&gt;<br />
&lt;ul&gt;&lt;?php echo $children; ?&gt;&lt;/ul&gt;<br />
&lt;?php } ?&gt;<br />
</code><br />
显示Wordpress标签<br />
<code><br />
&lt;?php the_tags(); ?&gt;<br />
</code><br />
显示Wordpress标签云<br />
<code><br />
&lt;?php wp_tag_cloud(’smallest=8&amp;largest=36&amp;’); ?&gt;<br />
</code><br />
模板标题<br />
<code><br />
&lt;?php /* Template Name: Portfolio */ ?&gt;<br />
</code><br />
动态标题标签<br />
<code><br />
&lt;title&gt;&lt;?phpif (is_home()) { echo bloginfo(’name’); } elseif (is_404()) { echo ‘404 Not Found’; } elseif (is_category()) { echo ‘Category:’; wp_title(”); } elseif (is_search()) { echo ‘Search Results’; } elseif ( is_day() || is_month() || is_year() ) { echo ‘Archives:’; wp_title(”); } else { echo wp_title(”); } ?&gt;&lt;/title&gt;<br />
</code><br />
在独立页面中运行PHP<br />
<code><br />
&lt;?php if ( is_home() ) { include (’file.php’); } ?&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/934_wordpress-theme-function.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

