PHP为不同的输出运行两次相同的功能

时间:2016-04-22 13:18:45

标签: php wordpress

在纯理论中,我的问题是,是否有可能让一个php函数每次运行两次,每次都使用不同的变量并返回结果。

在实践中,我正在修补WordPress的子主题(并学习一些PHP基础知识)。原始主题twentysixteen具有使用多个参数构建Google字体链接的功能,并输出最终URL,然后由其他一些函数获取并插入到头模板中,并添加了HTML标记 - link,href,rel ,输入。

在我的孩子主题中,我必须完全替换其中一个默认字体,所以不是重建函数,而是简单地将其最小化以包含并输出最终的字体URL,如下所示:

if ( ! function_exists( 'twentysixteen_fonts_url' ) ) :
function twentysixteen_fonts_url() {
    $fonts_url = 'https://fonts.googleapis.com/css?family=Merriweather:400,700,900,400italic,700italic,900italic|Inconsolata&subset=latin,latin-ext,cyrillic,greek';
    return $fonts_url;
}
endif;

我现在要做的是在此函数中获取另一个URL(https://code.cdn.mozilla.net/fonts/fira.css),以便从Mozilla的CDN和Google的CDN中加载第三种字体。

无法将其放入具有不同名称的单独函数中,因为其输出不会被头模板拾取。使用数组将两个url放入一个链接href。

有人可以指出我正确的方向吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

Twentysixtee juste使用一种字体,并使用twentysixteen_fonts_url ()生成网址

如果查看Twentysixtee的function.php,twentysixteen_fonts_url ()仅使用2次。它用于在编辑器(第144行)和前端(第233行)中包含字体URL。

添加其他字体

如果您想添加其他字体,则需要将其添加到您的子主题中。

您可以在function.php

中添加以下代码来执行此操作
function my_child_theme_font_url() 
{
    $fonts_url = 'https://code.cdn.mozilla.net/fonts/fira.css';
    return $fonts_url;
}


function my_child_theme_enqueue_scripts() 
{
    wp_enqueue_style( 'my_child_font', my_child_theme_font_url(), array(), null );
}
add_action( 'wp_enqueue_scripts', 'my_child_theme_enqueue_scripts' );

答案 1 :(得分:-1)

正如@MonkeyZeus所建议的那样,在这种情况下实现另一个webfont排队的最简单方法是保留第一个函数,并在它之后添加一个不同的函数,以便将所需文件排入队列,如下所示:

  public class IncrementableInteger {
    public int value;

    @Override
    public String toString() {
      return String.valueOf(value);
    }
  }

  @Test
  public void testThreadAlternating() throws InterruptedException {
    IncrementableInteger i = new IncrementableInteger();

    Monitor m = new Monitor();
    Monitor.Guard modIsZeroGuard = new Monitor.Guard(m) {
      @Override public boolean isSatisfied() {
        return i.value % 2 == 0;
      }
    };

    Monitor.Guard modIsOneGuard = new Monitor.Guard(m) {
      @Override public boolean isSatisfied() {
        return i.value % 2 == 1;
      }
    };

    Thread one = new Thread(() -> {
      while (true) {
        m.enterWhenUninterruptibly(modIsZeroGuard);
        try {
          if (i.value >= 10) return;
          i.value++;
          System.out.println("Thread 1 inc: " + String.valueOf(i));
        } finally {
          m.leave();
        }
      }
    });

    Thread two = new Thread(() -> {
      while (true) {
        m.enterWhenUninterruptibly(modIsOneGuard);
        try {
          if (i.value >= 10) return;
          i.value++;
          System.out.println("Thread 2 inc: " + String.valueOf(i));
        } finally {
          m.leave();
        }
      }
    });

    one.start();
    two.start();

    one.join();
    two.join();
  }

至于我的问题的理论部分,我理解以某种方式强制函数第二次运行并产生不同的输出不会强制使用此输出的其他函数也运行第二次,产生不同的结果。为此,必须修改调用函数,而不是发出函数。

感谢@MonkeyZeus和@ Jordane-CURE的帮助。